// 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  BFu7ll_BFu8s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu8s_BFu9s) C1{ FL:7 Fs:8 Fs:9}



static void Test_BFu7ll_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu9s, BFu7ll_BFu8s_BFu9s)
//============================================================================


struct  BFu7ll_BFu8s_C  {
  __tsu64 v1:7;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu7ll_BFu8s_C) C1{ FL:7 Fs:8 Fc}



static void Test_BFu7ll_BFu8s_C()
{
  {
    init_simple_test("BFu7ll_BFu8s_C");
    static STRUCT_IF_C BFu7ll_BFu8s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_C, BFu7ll_BFu8s_C)
//============================================================================


struct  BFu7ll_BFu8s_D  {
  __tsu64 v1:7;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu7ll_BFu8s_D) C1{ FL:7 Fs:8 FL}



static void Test_BFu7ll_BFu8s_D()
{
  {
    init_simple_test("BFu7ll_BFu8s_D");
    static STRUCT_IF_C BFu7ll_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_D, BFu7ll_BFu8s_D)
//============================================================================


struct  BFu7ll_BFu8s_F  {
  __tsu64 v1:7;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu7ll_BFu8s_F) C1{ FL:7 Fs:8 Fi}



static void Test_BFu7ll_BFu8s_F()
{
  {
    init_simple_test("BFu7ll_BFu8s_F");
    static STRUCT_IF_C BFu7ll_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_F, BFu7ll_BFu8s_F)
//============================================================================


struct  BFu7ll_BFu8s_I  {
  __tsu64 v1:7;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu7ll_BFu8s_I) C1{ FL:7 Fs:8 Fi}



static void Test_BFu7ll_BFu8s_I()
{
  {
    init_simple_test("BFu7ll_BFu8s_I");
    static STRUCT_IF_C BFu7ll_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_I, BFu7ll_BFu8s_I)
//============================================================================


struct  BFu7ll_BFu8s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu7ll_BFu8s_Ip) C1{ FL:7 Fs:8 Fp}



static void Test_BFu7ll_BFu8s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu8s_Ip");
    static STRUCT_IF_C BFu7ll_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Ip, BFu7ll_BFu8s_Ip)
//============================================================================


struct  BFu7ll_BFu8s_L  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu8s_L) C1{ FL:7 Fs:8 FL}



static void Test_BFu7ll_BFu8s_L()
{
  {
    init_simple_test("BFu7ll_BFu8s_L");
    static STRUCT_IF_C BFu7ll_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_L, BFu7ll_BFu8s_L)
//============================================================================


struct  BFu7ll_BFu8s_S  {
  __tsu64 v1:7;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu7ll_BFu8s_S) C1{ FL:7 Fs:8 Fs}



static void Test_BFu7ll_BFu8s_S()
{
  {
    init_simple_test("BFu7ll_BFu8s_S");
    static STRUCT_IF_C BFu7ll_BFu8s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_S, BFu7ll_BFu8s_S)
//============================================================================


struct  BFu7ll_BFu8s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu8s_Uc) C1{ FL:7 Fs:8 Fc}



static void Test_BFu7ll_BFu8s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu8s_Uc");
    static STRUCT_IF_C BFu7ll_BFu8s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Uc, BFu7ll_BFu8s_Uc)
//============================================================================


struct  BFu7ll_BFu8s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu8s_Ui) C1{ FL:7 Fs:8 Fi}



static void Test_BFu7ll_BFu8s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu8s_Ui");
    static STRUCT_IF_C BFu7ll_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Ui, BFu7ll_BFu8s_Ui)
//============================================================================


struct  BFu7ll_BFu8s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu8s_Ul) C1{ FL:7 Fs:8 FL}



static void Test_BFu7ll_BFu8s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu8s_Ul");
    static STRUCT_IF_C BFu7ll_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Ul, BFu7ll_BFu8s_Ul)
//============================================================================


struct  BFu7ll_BFu8s_Us  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu8s_Us) C1{ FL:7 Fs:8 Fs}



static void Test_BFu7ll_BFu8s_Us()
{
  {
    init_simple_test("BFu7ll_BFu8s_Us");
    static STRUCT_IF_C BFu7ll_BFu8s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Us, BFu7ll_BFu8s_Us)
//============================================================================


struct  BFu7ll_BFu8s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu7ll_BFu8s_Vp) C1{ FL:7 Fs:8 Fp}



static void Test_BFu7ll_BFu8s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu8s_Vp");
    static STRUCT_IF_C BFu7ll_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_Vp, BFu7ll_BFu8s_Vp)
//============================================================================


struct  BFu7ll_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu7ll_BFu9i) C1{ FL:7 Fi:9}



static void Test_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i, BFu7ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu9i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu9i_BFu15i) C1{ FL:7 Fi:9 Fi:15}



static void Test_BFu7ll_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu15i, BFu7ll_BFu9i_BFu15i)
//============================================================================


struct  BFu7ll_BFu9i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu9i_BFu15ll) C1{ FL:7 Fi:9 FL:15}



static void Test_BFu7ll_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu15ll, BFu7ll_BFu9i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu9i_BFu15s) C1{ FL:7 Fi:9 Fs:15}



static void Test_BFu7ll_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu15s, BFu7ll_BFu9i_BFu15s)
//============================================================================


struct  BFu7ll_BFu9i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu9i_BFu16i) C1{ FL:7 Fi:9 Fi:16}



static void Test_BFu7ll_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu16i, BFu7ll_BFu9i_BFu16i)
//============================================================================


struct  BFu7ll_BFu9i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu9i_BFu16ll) C1{ FL:7 Fi:9 FL:16}



static void Test_BFu7ll_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu16ll, BFu7ll_BFu9i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu9i_BFu16s) C1{ FL:7 Fi:9 Fs:16}



static void Test_BFu7ll_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu16s, BFu7ll_BFu9i_BFu16s)
//============================================================================


struct  BFu7ll_BFu9i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu9i_BFu17i) C1{ FL:7 Fi:9 Fi:17}



static void Test_BFu7ll_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu17i, BFu7ll_BFu9i_BFu17i)
//============================================================================


struct  BFu7ll_BFu9i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu9i_BFu17ll) C1{ FL:7 Fi:9 FL:17}



static void Test_BFu7ll_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu17ll, BFu7ll_BFu9i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu9i_BFu1c) C1{ FL:7 Fi:9 Fc:1}



static void Test_BFu7ll_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu1c, BFu7ll_BFu9i_BFu1c)
//============================================================================


struct  BFu7ll_BFu9i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu9i_BFu1i) C1{ FL:7 Fi:9 Fi:1}



static void Test_BFu7ll_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu1i, BFu7ll_BFu9i_BFu1i)
//============================================================================


struct  BFu7ll_BFu9i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu9i_BFu1ll) C1{ FL:7 Fi:9 FL:1}



static void Test_BFu7ll_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu1ll, BFu7ll_BFu9i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu9i_BFu1s) C1{ FL:7 Fi:9 Fs:1}



static void Test_BFu7ll_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu1s, BFu7ll_BFu9i_BFu1s)
//============================================================================


struct  BFu7ll_BFu9i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu9i_BFu31i) C1{ FL:7 Fi:9 Fi:31}



static void Test_BFu7ll_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu31i, BFu7ll_BFu9i_BFu31i)
//============================================================================


struct  BFu7ll_BFu9i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu9i_BFu31ll) C1{ FL:7 Fi:9 FL:31}



static void Test_BFu7ll_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu31ll, BFu7ll_BFu9i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu9i_BFu32i) C1{ FL:7 Fi:9 Fi:32}



static void Test_BFu7ll_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu32i, BFu7ll_BFu9i_BFu32i)
//============================================================================


struct  BFu7ll_BFu9i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu9i_BFu32ll) C1{ FL:7 Fi:9 FL:32}



static void Test_BFu7ll_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu32ll, BFu7ll_BFu9i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu9i_BFu33) C1{ FL:7 Fi:9 FL:33}



static void Test_BFu7ll_BFu9i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu33, BFu7ll_BFu9i_BFu33)
//============================================================================


struct  BFu7ll_BFu9i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu9i_BFu7c) C1{ FL:7 Fi:9 Fc:7}



static void Test_BFu7ll_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu7c, BFu7ll_BFu9i_BFu7c)
//============================================================================


struct  BFu7ll_BFu9i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu9i_BFu7i) C1{ FL:7 Fi:9 Fi:7}



static void Test_BFu7ll_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu7i, BFu7ll_BFu9i_BFu7i)
//============================================================================


struct  BFu7ll_BFu9i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu9i_BFu7ll) C1{ FL:7 Fi:9 FL:7}



static void Test_BFu7ll_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu7ll, BFu7ll_BFu9i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu9i_BFu7s) C1{ FL:7 Fi:9 Fs:7}



static void Test_BFu7ll_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu7s, BFu7ll_BFu9i_BFu7s)
//============================================================================


struct  BFu7ll_BFu9i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu9i_BFu8c) C1{ FL:7 Fi:9 Fc:8}



static void Test_BFu7ll_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu8c, BFu7ll_BFu9i_BFu8c)
//============================================================================


struct  BFu7ll_BFu9i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu9i_BFu8i) C1{ FL:7 Fi:9 Fi:8}



static void Test_BFu7ll_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu8i, BFu7ll_BFu9i_BFu8i)
//============================================================================


struct  BFu7ll_BFu9i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu9i_BFu8ll) C1{ FL:7 Fi:9 FL:8}



static void Test_BFu7ll_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu8ll, BFu7ll_BFu9i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu9i_BFu8s) C1{ FL:7 Fi:9 Fs:8}



static void Test_BFu7ll_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu8s, BFu7ll_BFu9i_BFu8s)
//============================================================================


struct  BFu7ll_BFu9i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu9i_BFu9i) C1{ FL:7 Fi:9 Fi:9}



static void Test_BFu7ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu9i, BFu7ll_BFu9i_BFu9i)
//============================================================================


struct  BFu7ll_BFu9i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu9i_BFu9ll) C1{ FL:7 Fi:9 FL:9}



static void Test_BFu7ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu9ll, BFu7ll_BFu9i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu9i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu9i_BFu9s) C1{ FL:7 Fi:9 Fs:9}



static void Test_BFu7ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_BFu9s, BFu7ll_BFu9i_BFu9s)
//============================================================================


struct  BFu7ll_BFu9i_C  {
  __tsu64 v1:7;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu7ll_BFu9i_C) C1{ FL:7 Fi:9 Fc}



static void Test_BFu7ll_BFu9i_C()
{
  {
    init_simple_test("BFu7ll_BFu9i_C");
    static STRUCT_IF_C BFu7ll_BFu9i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_C, BFu7ll_BFu9i_C)
//============================================================================


struct  BFu7ll_BFu9i_D  {
  __tsu64 v1:7;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu7ll_BFu9i_D) C1{ FL:7 Fi:9 FL}



static void Test_BFu7ll_BFu9i_D()
{
  {
    init_simple_test("BFu7ll_BFu9i_D");
    static STRUCT_IF_C BFu7ll_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_D, BFu7ll_BFu9i_D)
//============================================================================


struct  BFu7ll_BFu9i_F  {
  __tsu64 v1:7;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu7ll_BFu9i_F) C1{ FL:7 Fi:9 Fi}



static void Test_BFu7ll_BFu9i_F()
{
  {
    init_simple_test("BFu7ll_BFu9i_F");
    static STRUCT_IF_C BFu7ll_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_F, BFu7ll_BFu9i_F)
//============================================================================


struct  BFu7ll_BFu9i_I  {
  __tsu64 v1:7;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu7ll_BFu9i_I) C1{ FL:7 Fi:9 Fi}



static void Test_BFu7ll_BFu9i_I()
{
  {
    init_simple_test("BFu7ll_BFu9i_I");
    static STRUCT_IF_C BFu7ll_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_I, BFu7ll_BFu9i_I)
//============================================================================


struct  BFu7ll_BFu9i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu7ll_BFu9i_Ip) C1{ FL:7 Fi:9 Fp}



static void Test_BFu7ll_BFu9i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu9i_Ip");
    static STRUCT_IF_C BFu7ll_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Ip, BFu7ll_BFu9i_Ip)
//============================================================================


struct  BFu7ll_BFu9i_L  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu9i_L) C1{ FL:7 Fi:9 FL}



static void Test_BFu7ll_BFu9i_L()
{
  {
    init_simple_test("BFu7ll_BFu9i_L");
    static STRUCT_IF_C BFu7ll_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_L, BFu7ll_BFu9i_L)
//============================================================================


struct  BFu7ll_BFu9i_S  {
  __tsu64 v1:7;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu7ll_BFu9i_S) C1{ FL:7 Fi:9 Fs}



static void Test_BFu7ll_BFu9i_S()
{
  {
    init_simple_test("BFu7ll_BFu9i_S");
    static STRUCT_IF_C BFu7ll_BFu9i_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_S, BFu7ll_BFu9i_S)
//============================================================================


struct  BFu7ll_BFu9i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu9i_Uc) C1{ FL:7 Fi:9 Fc}



static void Test_BFu7ll_BFu9i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu9i_Uc");
    static STRUCT_IF_C BFu7ll_BFu9i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Uc, BFu7ll_BFu9i_Uc)
//============================================================================


struct  BFu7ll_BFu9i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu9i_Ui) C1{ FL:7 Fi:9 Fi}



static void Test_BFu7ll_BFu9i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu9i_Ui");
    static STRUCT_IF_C BFu7ll_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Ui, BFu7ll_BFu9i_Ui)
//============================================================================


struct  BFu7ll_BFu9i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu9i_Ul) C1{ FL:7 Fi:9 FL}



static void Test_BFu7ll_BFu9i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu9i_Ul");
    static STRUCT_IF_C BFu7ll_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Ul, BFu7ll_BFu9i_Ul)
//============================================================================


struct  BFu7ll_BFu9i_Us  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu9i_Us) C1{ FL:7 Fi:9 Fs}



static void Test_BFu7ll_BFu9i_Us()
{
  {
    init_simple_test("BFu7ll_BFu9i_Us");
    static STRUCT_IF_C BFu7ll_BFu9i_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Us, BFu7ll_BFu9i_Us)
//============================================================================


struct  BFu7ll_BFu9i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu7ll_BFu9i_Vp) C1{ FL:7 Fi:9 Fp}



static void Test_BFu7ll_BFu9i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu9i_Vp");
    static STRUCT_IF_C BFu7ll_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9i_Vp, BFu7ll_BFu9i_Vp)
//============================================================================


struct  BFu7ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu7ll_BFu9ll) C1{ FL:7 FL:9}



static void Test_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll, BFu7ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu9ll_BFu15i) C1{ FL:7 FL:9 Fi:15}



static void Test_BFu7ll_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu15i, BFu7ll_BFu9ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu9ll_BFu15ll) C1{ FL:7 FL:9 FL:15}



static void Test_BFu7ll_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu15ll, BFu7ll_BFu9ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu9ll_BFu15s) C1{ FL:7 FL:9 Fs:15}



static void Test_BFu7ll_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu15s, BFu7ll_BFu9ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu9ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu9ll_BFu16i) C1{ FL:7 FL:9 Fi:16}



static void Test_BFu7ll_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu16i, BFu7ll_BFu9ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu9ll_BFu16ll) C1{ FL:7 FL:9 FL:16}



static void Test_BFu7ll_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu16ll, BFu7ll_BFu9ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu9ll_BFu16s) C1{ FL:7 FL:9 Fs:16}



static void Test_BFu7ll_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu16s, BFu7ll_BFu9ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu9ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu9ll_BFu17i) C1{ FL:7 FL:9 Fi:17}



static void Test_BFu7ll_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu17i, BFu7ll_BFu9ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu9ll_BFu17ll) C1{ FL:7 FL:9 FL:17}



static void Test_BFu7ll_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu17ll, BFu7ll_BFu9ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu9ll_BFu1c) C1{ FL:7 FL:9 Fc:1}



static void Test_BFu7ll_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu1c, BFu7ll_BFu9ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu9ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu9ll_BFu1i) C1{ FL:7 FL:9 Fi:1}



static void Test_BFu7ll_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu1i, BFu7ll_BFu9ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu9ll_BFu1ll) C1{ FL:7 FL:9 FL:1}



static void Test_BFu7ll_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu1ll, BFu7ll_BFu9ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu9ll_BFu1s) C1{ FL:7 FL:9 Fs:1}



static void Test_BFu7ll_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu1s, BFu7ll_BFu9ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu9ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu9ll_BFu31i) C1{ FL:7 FL:9 Fi:31}



static void Test_BFu7ll_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu31i, BFu7ll_BFu9ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu9ll_BFu31ll) C1{ FL:7 FL:9 FL:31}



static void Test_BFu7ll_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu31ll, BFu7ll_BFu9ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu9ll_BFu32i) C1{ FL:7 FL:9 Fi:32}



static void Test_BFu7ll_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu32i, BFu7ll_BFu9ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu9ll_BFu32ll) C1{ FL:7 FL:9 FL:32}



static void Test_BFu7ll_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu32ll, BFu7ll_BFu9ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu9ll_BFu33) C1{ FL:7 FL:9 FL:33}



static void Test_BFu7ll_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu33, BFu7ll_BFu9ll_BFu33)
//============================================================================


struct  BFu7ll_BFu9ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu9ll_BFu7c) C1{ FL:7 FL:9 Fc:7}



static void Test_BFu7ll_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu7c, BFu7ll_BFu9ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu9ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu9ll_BFu7i) C1{ FL:7 FL:9 Fi:7}



static void Test_BFu7ll_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu7i, BFu7ll_BFu9ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu9ll_BFu7ll) C1{ FL:7 FL:9 FL:7}



static void Test_BFu7ll_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu7ll, BFu7ll_BFu9ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu9ll_BFu7s) C1{ FL:7 FL:9 Fs:7}



static void Test_BFu7ll_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu7s, BFu7ll_BFu9ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu9ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu9ll_BFu8c) C1{ FL:7 FL:9 Fc:8}



static void Test_BFu7ll_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu8c, BFu7ll_BFu9ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu9ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu9ll_BFu8i) C1{ FL:7 FL:9 Fi:8}



static void Test_BFu7ll_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu8i, BFu7ll_BFu9ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu9ll_BFu8ll) C1{ FL:7 FL:9 FL:8}



static void Test_BFu7ll_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu8ll, BFu7ll_BFu9ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu9ll_BFu8s) C1{ FL:7 FL:9 Fs:8}



static void Test_BFu7ll_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu8s, BFu7ll_BFu9ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu9ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu9ll_BFu9i) C1{ FL:7 FL:9 Fi:9}



static void Test_BFu7ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu9i, BFu7ll_BFu9ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu9ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu9ll_BFu9ll) C1{ FL:7 FL:9 FL:9}



static void Test_BFu7ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu9ll, BFu7ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu9ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu9ll_BFu9s) C1{ FL:7 FL:9 Fs:9}



static void Test_BFu7ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_BFu9s, BFu7ll_BFu9ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu9ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu7ll_BFu9ll_C) C1{ FL:7 FL:9 Fc}



static void Test_BFu7ll_BFu9ll_C()
{
  {
    init_simple_test("BFu7ll_BFu9ll_C");
    static STRUCT_IF_C BFu7ll_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_C, BFu7ll_BFu9ll_C)
//============================================================================


struct  BFu7ll_BFu9ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu7ll_BFu9ll_D) C1{ FL:7 FL:9 FL}



static void Test_BFu7ll_BFu9ll_D()
{
  {
    init_simple_test("BFu7ll_BFu9ll_D");
    static STRUCT_IF_C BFu7ll_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_D, BFu7ll_BFu9ll_D)
//============================================================================


struct  BFu7ll_BFu9ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu7ll_BFu9ll_F) C1{ FL:7 FL:9 Fi}



static void Test_BFu7ll_BFu9ll_F()
{
  {
    init_simple_test("BFu7ll_BFu9ll_F");
    static STRUCT_IF_C BFu7ll_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_F, BFu7ll_BFu9ll_F)
//============================================================================


struct  BFu7ll_BFu9ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu7ll_BFu9ll_I) C1{ FL:7 FL:9 Fi}



static void Test_BFu7ll_BFu9ll_I()
{
  {
    init_simple_test("BFu7ll_BFu9ll_I");
    static STRUCT_IF_C BFu7ll_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_I, BFu7ll_BFu9ll_I)
//============================================================================


struct  BFu7ll_BFu9ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu7ll_BFu9ll_Ip) C1{ FL:7 FL:9 Fp}



static void Test_BFu7ll_BFu9ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Ip, BFu7ll_BFu9ll_Ip)
//============================================================================


struct  BFu7ll_BFu9ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu9ll_L) C1{ FL:7 FL:9 FL}



static void Test_BFu7ll_BFu9ll_L()
{
  {
    init_simple_test("BFu7ll_BFu9ll_L");
    static STRUCT_IF_C BFu7ll_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_L, BFu7ll_BFu9ll_L)
//============================================================================


struct  BFu7ll_BFu9ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu7ll_BFu9ll_S) C1{ FL:7 FL:9 Fs}



static void Test_BFu7ll_BFu9ll_S()
{
  {
    init_simple_test("BFu7ll_BFu9ll_S");
    static STRUCT_IF_C BFu7ll_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_S, BFu7ll_BFu9ll_S)
//============================================================================


struct  BFu7ll_BFu9ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu9ll_Uc) C1{ FL:7 FL:9 Fc}



static void Test_BFu7ll_BFu9ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Uc, BFu7ll_BFu9ll_Uc)
//============================================================================


struct  BFu7ll_BFu9ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu9ll_Ui) C1{ FL:7 FL:9 Fi}



static void Test_BFu7ll_BFu9ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Ui, BFu7ll_BFu9ll_Ui)
//============================================================================


struct  BFu7ll_BFu9ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu9ll_Ul) C1{ FL:7 FL:9 FL}



static void Test_BFu7ll_BFu9ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Ul, BFu7ll_BFu9ll_Ul)
//============================================================================


struct  BFu7ll_BFu9ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu9ll_Us) C1{ FL:7 FL:9 Fs}



static void Test_BFu7ll_BFu9ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Us");
    static STRUCT_IF_C BFu7ll_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Us, BFu7ll_BFu9ll_Us)
//============================================================================


struct  BFu7ll_BFu9ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu7ll_BFu9ll_Vp) C1{ FL:7 FL:9 Fp}



static void Test_BFu7ll_BFu9ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu9ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9ll_Vp, BFu7ll_BFu9ll_Vp)
//============================================================================


struct  BFu7ll_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu7ll_BFu9s) C1{ FL:7 Fs:9}



static void Test_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s, BFu7ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu9s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu9s_BFu15i) C1{ FL:7 Fs:9 Fi:15}



static void Test_BFu7ll_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu15i, BFu7ll_BFu9s_BFu15i)
//============================================================================


struct  BFu7ll_BFu9s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu9s_BFu15ll) C1{ FL:7 Fs:9 FL:15}



static void Test_BFu7ll_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu15ll, BFu7ll_BFu9s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu9s_BFu15s) C1{ FL:7 Fs:9 Fs:15}



static void Test_BFu7ll_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu15s, BFu7ll_BFu9s_BFu15s)
//============================================================================


struct  BFu7ll_BFu9s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu9s_BFu16i) C1{ FL:7 Fs:9 Fi:16}



static void Test_BFu7ll_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu16i, BFu7ll_BFu9s_BFu16i)
//============================================================================


struct  BFu7ll_BFu9s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu9s_BFu16ll) C1{ FL:7 Fs:9 FL:16}



static void Test_BFu7ll_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu16ll, BFu7ll_BFu9s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu9s_BFu16s) C1{ FL:7 Fs:9 Fs:16}



static void Test_BFu7ll_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu16s, BFu7ll_BFu9s_BFu16s)
//============================================================================


struct  BFu7ll_BFu9s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu9s_BFu17i) C1{ FL:7 Fs:9 Fi:17}



static void Test_BFu7ll_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu17i, BFu7ll_BFu9s_BFu17i)
//============================================================================


struct  BFu7ll_BFu9s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu9s_BFu17ll) C1{ FL:7 Fs:9 FL:17}



static void Test_BFu7ll_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu17ll, BFu7ll_BFu9s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu9s_BFu1c) C1{ FL:7 Fs:9 Fc:1}



static void Test_BFu7ll_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu1c, BFu7ll_BFu9s_BFu1c)
//============================================================================


struct  BFu7ll_BFu9s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu9s_BFu1i) C1{ FL:7 Fs:9 Fi:1}



static void Test_BFu7ll_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu1i, BFu7ll_BFu9s_BFu1i)
//============================================================================


struct  BFu7ll_BFu9s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu9s_BFu1ll) C1{ FL:7 Fs:9 FL:1}



static void Test_BFu7ll_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu1ll, BFu7ll_BFu9s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu9s_BFu1s) C1{ FL:7 Fs:9 Fs:1}



static void Test_BFu7ll_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu1s, BFu7ll_BFu9s_BFu1s)
//============================================================================


struct  BFu7ll_BFu9s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu9s_BFu31i) C1{ FL:7 Fs:9 Fi:31}



static void Test_BFu7ll_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu31i, BFu7ll_BFu9s_BFu31i)
//============================================================================


struct  BFu7ll_BFu9s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu9s_BFu31ll) C1{ FL:7 Fs:9 FL:31}



static void Test_BFu7ll_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu31ll, BFu7ll_BFu9s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu9s_BFu32i) C1{ FL:7 Fs:9 Fi:32}



static void Test_BFu7ll_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu32i, BFu7ll_BFu9s_BFu32i)
//============================================================================


struct  BFu7ll_BFu9s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu9s_BFu32ll) C1{ FL:7 Fs:9 FL:32}



static void Test_BFu7ll_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu32ll, BFu7ll_BFu9s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu9s_BFu33) C1{ FL:7 Fs:9 FL:33}



static void Test_BFu7ll_BFu9s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu33, BFu7ll_BFu9s_BFu33)
//============================================================================


struct  BFu7ll_BFu9s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu9s_BFu7c) C1{ FL:7 Fs:9 Fc:7}



static void Test_BFu7ll_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu7c, BFu7ll_BFu9s_BFu7c)
//============================================================================


struct  BFu7ll_BFu9s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu9s_BFu7i) C1{ FL:7 Fs:9 Fi:7}



static void Test_BFu7ll_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu7i, BFu7ll_BFu9s_BFu7i)
//============================================================================


struct  BFu7ll_BFu9s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu9s_BFu7ll) C1{ FL:7 Fs:9 FL:7}



static void Test_BFu7ll_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu7ll, BFu7ll_BFu9s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu9s_BFu7s) C1{ FL:7 Fs:9 Fs:7}



static void Test_BFu7ll_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu7s, BFu7ll_BFu9s_BFu7s)
//============================================================================


struct  BFu7ll_BFu9s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu9s_BFu8c) C1{ FL:7 Fs:9 Fc:8}



static void Test_BFu7ll_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu8c, BFu7ll_BFu9s_BFu8c)
//============================================================================


struct  BFu7ll_BFu9s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu9s_BFu8i) C1{ FL:7 Fs:9 Fi:8}



static void Test_BFu7ll_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu8i, BFu7ll_BFu9s_BFu8i)
//============================================================================


struct  BFu7ll_BFu9s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu9s_BFu8ll) C1{ FL:7 Fs:9 FL:8}



static void Test_BFu7ll_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu8ll, BFu7ll_BFu9s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu9s_BFu8s) C1{ FL:7 Fs:9 Fs:8}



static void Test_BFu7ll_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu8s, BFu7ll_BFu9s_BFu8s)
//============================================================================


struct  BFu7ll_BFu9s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu9s_BFu9i) C1{ FL:7 Fs:9 Fi:9}



static void Test_BFu7ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu9i, BFu7ll_BFu9s_BFu9i)
//============================================================================


struct  BFu7ll_BFu9s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu9s_BFu9ll) C1{ FL:7 Fs:9 FL:9}



static void Test_BFu7ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu9ll, BFu7ll_BFu9s_BFu9ll)
//============================================================================


struct  BFu7ll_BFu9s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu9s_BFu9s) C1{ FL:7 Fs:9 Fs:9}



static void Test_BFu7ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_BFu9s, BFu7ll_BFu9s_BFu9s)
//============================================================================


struct  BFu7ll_BFu9s_C  {
  __tsu64 v1:7;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu7ll_BFu9s_C) C1{ FL:7 Fs:9 Fc}



static void Test_BFu7ll_BFu9s_C()
{
  {
    init_simple_test("BFu7ll_BFu9s_C");
    static STRUCT_IF_C BFu7ll_BFu9s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_C, BFu7ll_BFu9s_C)
//============================================================================


struct  BFu7ll_BFu9s_D  {
  __tsu64 v1:7;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu7ll_BFu9s_D) C1{ FL:7 Fs:9 FL}



static void Test_BFu7ll_BFu9s_D()
{
  {
    init_simple_test("BFu7ll_BFu9s_D");
    static STRUCT_IF_C BFu7ll_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_D, BFu7ll_BFu9s_D)
//============================================================================


struct  BFu7ll_BFu9s_F  {
  __tsu64 v1:7;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu7ll_BFu9s_F) C1{ FL:7 Fs:9 Fi}



static void Test_BFu7ll_BFu9s_F()
{
  {
    init_simple_test("BFu7ll_BFu9s_F");
    static STRUCT_IF_C BFu7ll_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_F, BFu7ll_BFu9s_F)
//============================================================================


struct  BFu7ll_BFu9s_I  {
  __tsu64 v1:7;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu7ll_BFu9s_I) C1{ FL:7 Fs:9 Fi}



static void Test_BFu7ll_BFu9s_I()
{
  {
    init_simple_test("BFu7ll_BFu9s_I");
    static STRUCT_IF_C BFu7ll_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_I, BFu7ll_BFu9s_I)
//============================================================================


struct  BFu7ll_BFu9s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu7ll_BFu9s_Ip) C1{ FL:7 Fs:9 Fp}



static void Test_BFu7ll_BFu9s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu9s_Ip");
    static STRUCT_IF_C BFu7ll_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Ip, BFu7ll_BFu9s_Ip)
//============================================================================


struct  BFu7ll_BFu9s_L  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu9s_L) C1{ FL:7 Fs:9 FL}



static void Test_BFu7ll_BFu9s_L()
{
  {
    init_simple_test("BFu7ll_BFu9s_L");
    static STRUCT_IF_C BFu7ll_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_L, BFu7ll_BFu9s_L)
//============================================================================


struct  BFu7ll_BFu9s_S  {
  __tsu64 v1:7;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu7ll_BFu9s_S) C1{ FL:7 Fs:9 Fs}



static void Test_BFu7ll_BFu9s_S()
{
  {
    init_simple_test("BFu7ll_BFu9s_S");
    static STRUCT_IF_C BFu7ll_BFu9s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_S, BFu7ll_BFu9s_S)
//============================================================================


struct  BFu7ll_BFu9s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu9s_Uc) C1{ FL:7 Fs:9 Fc}



static void Test_BFu7ll_BFu9s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu9s_Uc");
    static STRUCT_IF_C BFu7ll_BFu9s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Uc, BFu7ll_BFu9s_Uc)
//============================================================================


struct  BFu7ll_BFu9s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu9s_Ui) C1{ FL:7 Fs:9 Fi}



static void Test_BFu7ll_BFu9s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu9s_Ui");
    static STRUCT_IF_C BFu7ll_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu9s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Ui, BFu7ll_BFu9s_Ui)
//============================================================================


struct  BFu7ll_BFu9s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu9s_Ul) C1{ FL:7 Fs:9 FL}



static void Test_BFu7ll_BFu9s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu9s_Ul");
    static STRUCT_IF_C BFu7ll_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Ul, BFu7ll_BFu9s_Ul)
//============================================================================


struct  BFu7ll_BFu9s_Us  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu9s_Us) C1{ FL:7 Fs:9 Fs}



static void Test_BFu7ll_BFu9s_Us()
{
  {
    init_simple_test("BFu7ll_BFu9s_Us");
    static STRUCT_IF_C BFu7ll_BFu9s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Us, BFu7ll_BFu9s_Us)
//============================================================================


struct  BFu7ll_BFu9s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu7ll_BFu9s_Vp) C1{ FL:7 Fs:9 Fp}



static void Test_BFu7ll_BFu9s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu9s_Vp");
    static STRUCT_IF_C BFu7ll_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu9s_Vp, BFu7ll_BFu9s_Vp)
//============================================================================


struct  BFu7ll_C  {
  __tsu64 v1:7;
  char v2;
};
//SIG(1 BFu7ll_C) C1{ FL:7 Fc}



static void Test_BFu7ll_C()
{
  {
    init_simple_test("BFu7ll_C");
    static STRUCT_IF_C BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C");
    check_field_offset(lv, v2, 1, "BFu7ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C, BFu7ll_C)
//============================================================================


struct  BFu7ll_C_BFu15i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_C_BFu15i) C1{ FL:7 Fc Fi:15}



static void Test_BFu7ll_C_BFu15i()
{
  {
    init_simple_test("BFu7ll_C_BFu15i");
    static STRUCT_IF_C BFu7ll_C_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu15i, BFu7ll_C_BFu15i)
//============================================================================


struct  BFu7ll_C_BFu15ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_C_BFu15ll) C1{ FL:7 Fc FL:15}



static void Test_BFu7ll_C_BFu15ll()
{
  {
    init_simple_test("BFu7ll_C_BFu15ll");
    static STRUCT_IF_C BFu7ll_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu15ll, BFu7ll_C_BFu15ll)
//============================================================================


struct  BFu7ll_C_BFu15s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_C_BFu15s) C1{ FL:7 Fc Fs:15}



static void Test_BFu7ll_C_BFu15s()
{
  {
    init_simple_test("BFu7ll_C_BFu15s");
    static STRUCT_IF_C BFu7ll_C_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu15s, BFu7ll_C_BFu15s)
//============================================================================


struct  BFu7ll_C_BFu16i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_C_BFu16i) C1{ FL:7 Fc Fi:16}



static void Test_BFu7ll_C_BFu16i()
{
  {
    init_simple_test("BFu7ll_C_BFu16i");
    static STRUCT_IF_C BFu7ll_C_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu16i, BFu7ll_C_BFu16i)
//============================================================================


struct  BFu7ll_C_BFu16ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_C_BFu16ll) C1{ FL:7 Fc FL:16}



static void Test_BFu7ll_C_BFu16ll()
{
  {
    init_simple_test("BFu7ll_C_BFu16ll");
    static STRUCT_IF_C BFu7ll_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu16ll, BFu7ll_C_BFu16ll)
//============================================================================


struct  BFu7ll_C_BFu16s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_C_BFu16s) C1{ FL:7 Fc Fs:16}



static void Test_BFu7ll_C_BFu16s()
{
  {
    init_simple_test("BFu7ll_C_BFu16s");
    static STRUCT_IF_C BFu7ll_C_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu16s, BFu7ll_C_BFu16s)
//============================================================================


struct  BFu7ll_C_BFu17i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_C_BFu17i) C1{ FL:7 Fc Fi:17}



static void Test_BFu7ll_C_BFu17i()
{
  {
    init_simple_test("BFu7ll_C_BFu17i");
    static STRUCT_IF_C BFu7ll_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu17i, BFu7ll_C_BFu17i)
//============================================================================


struct  BFu7ll_C_BFu17ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_C_BFu17ll) C1{ FL:7 Fc FL:17}



static void Test_BFu7ll_C_BFu17ll()
{
  {
    init_simple_test("BFu7ll_C_BFu17ll");
    static STRUCT_IF_C BFu7ll_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu17ll, BFu7ll_C_BFu17ll)
//============================================================================


struct  BFu7ll_C_BFu1c  {
  __tsu64 v1:7;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_C_BFu1c) C1{ FL:7 Fc Fc:1}



static void Test_BFu7ll_C_BFu1c()
{
  {
    init_simple_test("BFu7ll_C_BFu1c");
    static STRUCT_IF_C BFu7ll_C_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu1c, BFu7ll_C_BFu1c)
//============================================================================


struct  BFu7ll_C_BFu1i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_C_BFu1i) C1{ FL:7 Fc Fi:1}



static void Test_BFu7ll_C_BFu1i()
{
  {
    init_simple_test("BFu7ll_C_BFu1i");
    static STRUCT_IF_C BFu7ll_C_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu1i, BFu7ll_C_BFu1i)
//============================================================================


struct  BFu7ll_C_BFu1ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_C_BFu1ll) C1{ FL:7 Fc FL:1}



static void Test_BFu7ll_C_BFu1ll()
{
  {
    init_simple_test("BFu7ll_C_BFu1ll");
    static STRUCT_IF_C BFu7ll_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu1ll, BFu7ll_C_BFu1ll)
//============================================================================


struct  BFu7ll_C_BFu1s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_C_BFu1s) C1{ FL:7 Fc Fs:1}



static void Test_BFu7ll_C_BFu1s()
{
  {
    init_simple_test("BFu7ll_C_BFu1s");
    static STRUCT_IF_C BFu7ll_C_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu1s, BFu7ll_C_BFu1s)
//============================================================================


struct  BFu7ll_C_BFu31i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_C_BFu31i) C1{ FL:7 Fc Fi:31}



static void Test_BFu7ll_C_BFu31i()
{
  {
    init_simple_test("BFu7ll_C_BFu31i");
    static STRUCT_IF_C BFu7ll_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu31i, BFu7ll_C_BFu31i)
//============================================================================


struct  BFu7ll_C_BFu31ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_C_BFu31ll) C1{ FL:7 Fc FL:31}



static void Test_BFu7ll_C_BFu31ll()
{
  {
    init_simple_test("BFu7ll_C_BFu31ll");
    static STRUCT_IF_C BFu7ll_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu31ll, BFu7ll_C_BFu31ll)
//============================================================================


struct  BFu7ll_C_BFu32i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_C_BFu32i) C1{ FL:7 Fc Fi:32}



static void Test_BFu7ll_C_BFu32i()
{
  {
    init_simple_test("BFu7ll_C_BFu32i");
    static STRUCT_IF_C BFu7ll_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu32i, BFu7ll_C_BFu32i)
//============================================================================


struct  BFu7ll_C_BFu32ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_C_BFu32ll) C1{ FL:7 Fc FL:32}



static void Test_BFu7ll_C_BFu32ll()
{
  {
    init_simple_test("BFu7ll_C_BFu32ll");
    static STRUCT_IF_C BFu7ll_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu32ll, BFu7ll_C_BFu32ll)
//============================================================================


struct  BFu7ll_C_BFu33  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_C_BFu33) C1{ FL:7 Fc FL:33}



static void Test_BFu7ll_C_BFu33()
{
  {
    init_simple_test("BFu7ll_C_BFu33");
    static STRUCT_IF_C BFu7ll_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu33");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu33, BFu7ll_C_BFu33)
//============================================================================


struct  BFu7ll_C_BFu7c  {
  __tsu64 v1:7;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_C_BFu7c) C1{ FL:7 Fc Fc:7}



static void Test_BFu7ll_C_BFu7c()
{
  {
    init_simple_test("BFu7ll_C_BFu7c");
    static STRUCT_IF_C BFu7ll_C_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu7c, BFu7ll_C_BFu7c)
//============================================================================


struct  BFu7ll_C_BFu7i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_C_BFu7i) C1{ FL:7 Fc Fi:7}



static void Test_BFu7ll_C_BFu7i()
{
  {
    init_simple_test("BFu7ll_C_BFu7i");
    static STRUCT_IF_C BFu7ll_C_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu7i, BFu7ll_C_BFu7i)
//============================================================================


struct  BFu7ll_C_BFu7ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_C_BFu7ll) C1{ FL:7 Fc FL:7}



static void Test_BFu7ll_C_BFu7ll()
{
  {
    init_simple_test("BFu7ll_C_BFu7ll");
    static STRUCT_IF_C BFu7ll_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu7ll, BFu7ll_C_BFu7ll)
//============================================================================


struct  BFu7ll_C_BFu7s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_C_BFu7s) C1{ FL:7 Fc Fs:7}



static void Test_BFu7ll_C_BFu7s()
{
  {
    init_simple_test("BFu7ll_C_BFu7s");
    static STRUCT_IF_C BFu7ll_C_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu7s, BFu7ll_C_BFu7s)
//============================================================================


struct  BFu7ll_C_BFu8c  {
  __tsu64 v1:7;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_C_BFu8c) C1{ FL:7 Fc Fc:8}



static void Test_BFu7ll_C_BFu8c()
{
  {
    init_simple_test("BFu7ll_C_BFu8c");
    static STRUCT_IF_C BFu7ll_C_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu8c, BFu7ll_C_BFu8c)
//============================================================================


struct  BFu7ll_C_BFu8i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_C_BFu8i) C1{ FL:7 Fc Fi:8}



static void Test_BFu7ll_C_BFu8i()
{
  {
    init_simple_test("BFu7ll_C_BFu8i");
    static STRUCT_IF_C BFu7ll_C_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu8i, BFu7ll_C_BFu8i)
//============================================================================


struct  BFu7ll_C_BFu8ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_C_BFu8ll) C1{ FL:7 Fc FL:8}



static void Test_BFu7ll_C_BFu8ll()
{
  {
    init_simple_test("BFu7ll_C_BFu8ll");
    static STRUCT_IF_C BFu7ll_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu8ll, BFu7ll_C_BFu8ll)
//============================================================================


struct  BFu7ll_C_BFu8s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_C_BFu8s) C1{ FL:7 Fc Fs:8}



static void Test_BFu7ll_C_BFu8s()
{
  {
    init_simple_test("BFu7ll_C_BFu8s");
    static STRUCT_IF_C BFu7ll_C_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu8s, BFu7ll_C_BFu8s)
//============================================================================


struct  BFu7ll_C_BFu9i  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_C_BFu9i) C1{ FL:7 Fc Fi:9}



static void Test_BFu7ll_C_BFu9i()
{
  {
    init_simple_test("BFu7ll_C_BFu9i");
    static STRUCT_IF_C BFu7ll_C_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu9i, BFu7ll_C_BFu9i)
//============================================================================


struct  BFu7ll_C_BFu9ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_C_BFu9ll) C1{ FL:7 Fc FL:9}



static void Test_BFu7ll_C_BFu9ll()
{
  {
    init_simple_test("BFu7ll_C_BFu9ll");
    static STRUCT_IF_C BFu7ll_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu9ll, BFu7ll_C_BFu9ll)
//============================================================================


struct  BFu7ll_C_BFu9s  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_C_BFu9s) C1{ FL:7 Fc Fs:9}



static void Test_BFu7ll_C_BFu9s()
{
  {
    init_simple_test("BFu7ll_C_BFu9s");
    static STRUCT_IF_C BFu7ll_C_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_BFu9s, BFu7ll_C_BFu9s)
//============================================================================


struct  BFu7ll_C_C  {
  __tsu64 v1:7;
  char v2;
  char v3;
};
//SIG(1 BFu7ll_C_C) C1{ FL:7 Fc[2]}



static void Test_BFu7ll_C_C()
{
  {
    init_simple_test("BFu7ll_C_C");
    static STRUCT_IF_C BFu7ll_C_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_C");
    check_field_offset(lv, v2, 1, "BFu7ll_C_C.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_C, BFu7ll_C_C)
//============================================================================


struct  BFu7ll_C_D  {
  __tsu64 v1:7;
  char v2;
  double v3;
};
//SIG(1 BFu7ll_C_D) C1{ FL:7 Fc FL}



static void Test_BFu7ll_C_D()
{
  {
    init_simple_test("BFu7ll_C_D");
    static STRUCT_IF_C BFu7ll_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_D");
    check_field_offset(lv, v2, 1, "BFu7ll_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_D, BFu7ll_C_D)
//============================================================================


struct  BFu7ll_C_F  {
  __tsu64 v1:7;
  char v2;
  float v3;
};
//SIG(1 BFu7ll_C_F) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_C_F()
{
  {
    init_simple_test("BFu7ll_C_F");
    static STRUCT_IF_C BFu7ll_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_F");
    check_field_offset(lv, v2, 1, "BFu7ll_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_F, BFu7ll_C_F)
//============================================================================


struct  BFu7ll_C_I  {
  __tsu64 v1:7;
  char v2;
  int v3;
};
//SIG(1 BFu7ll_C_I) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_C_I()
{
  {
    init_simple_test("BFu7ll_C_I");
    static STRUCT_IF_C BFu7ll_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_I");
    check_field_offset(lv, v2, 1, "BFu7ll_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_I, BFu7ll_C_I)
//============================================================================


struct  BFu7ll_C_Ip  {
  __tsu64 v1:7;
  char v2;
  int *v3;
};
//SIG(1 BFu7ll_C_Ip) C1{ FL:7 Fc Fp}



static void Test_BFu7ll_C_Ip()
{
  {
    init_simple_test("BFu7ll_C_Ip");
    static STRUCT_IF_C BFu7ll_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Ip");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Ip, BFu7ll_C_Ip)
//============================================================================


struct  BFu7ll_C_L  {
  __tsu64 v1:7;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_C_L) C1{ FL:7 Fc FL}



static void Test_BFu7ll_C_L()
{
  {
    init_simple_test("BFu7ll_C_L");
    static STRUCT_IF_C BFu7ll_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_L");
    check_field_offset(lv, v2, 1, "BFu7ll_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_L, BFu7ll_C_L)
//============================================================================


struct  BFu7ll_C_S  {
  __tsu64 v1:7;
  char v2;
  short v3;
};
//SIG(1 BFu7ll_C_S) C1{ FL:7 Fc Fs}



static void Test_BFu7ll_C_S()
{
  {
    init_simple_test("BFu7ll_C_S");
    static STRUCT_IF_C BFu7ll_C_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_S");
    check_field_offset(lv, v2, 1, "BFu7ll_C_S.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_S, BFu7ll_C_S)
//============================================================================


struct  BFu7ll_C_Uc  {
  __tsu64 v1:7;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_C_Uc) C1{ FL:7 Fc[2]}



static void Test_BFu7ll_C_Uc()
{
  {
    init_simple_test("BFu7ll_C_Uc");
    static STRUCT_IF_C BFu7ll_C_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Uc");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Uc, BFu7ll_C_Uc)
//============================================================================


struct  BFu7ll_C_Ui  {
  __tsu64 v1:7;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_C_Ui) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_C_Ui()
{
  {
    init_simple_test("BFu7ll_C_Ui");
    static STRUCT_IF_C BFu7ll_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_C_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Ui");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Ui, BFu7ll_C_Ui)
//============================================================================


struct  BFu7ll_C_Ul  {
  __tsu64 v1:7;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_C_Ul) C1{ FL:7 Fc FL}



static void Test_BFu7ll_C_Ul()
{
  {
    init_simple_test("BFu7ll_C_Ul");
    static STRUCT_IF_C BFu7ll_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Ul");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Ul, BFu7ll_C_Ul)
//============================================================================


struct  BFu7ll_C_Us  {
  __tsu64 v1:7;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_C_Us) C1{ FL:7 Fc Fs}



static void Test_BFu7ll_C_Us()
{
  {
    init_simple_test("BFu7ll_C_Us");
    static STRUCT_IF_C BFu7ll_C_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Us");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Us, BFu7ll_C_Us)
//============================================================================


struct  BFu7ll_C_Vp  {
  __tsu64 v1:7;
  char v2;
  void *v3;
};
//SIG(1 BFu7ll_C_Vp) C1{ FL:7 Fc Fp}



static void Test_BFu7ll_C_Vp()
{
  {
    init_simple_test("BFu7ll_C_Vp");
    static STRUCT_IF_C BFu7ll_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_Vp");
    check_field_offset(lv, v2, 1, "BFu7ll_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_C_Vp, BFu7ll_C_Vp)
//============================================================================


struct  BFu7ll_D  {
  __tsu64 v1:7;
  double v2;
};
//SIG(1 BFu7ll_D) C1{ FL:7 FL}



static void Test_BFu7ll_D()
{
  {
    init_simple_test("BFu7ll_D");
    static STRUCT_IF_C BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D, BFu7ll_D)
//============================================================================


struct  BFu7ll_D_BFu15i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_D_BFu15i) C1{ FL:7 FL Fi:15}



static void Test_BFu7ll_D_BFu15i()
{
  {
    init_simple_test("BFu7ll_D_BFu15i");
    static STRUCT_IF_C BFu7ll_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu15i, BFu7ll_D_BFu15i)
//============================================================================


struct  BFu7ll_D_BFu15ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_D_BFu15ll) C1{ FL:7 FL FL:15}



static void Test_BFu7ll_D_BFu15ll()
{
  {
    init_simple_test("BFu7ll_D_BFu15ll");
    static STRUCT_IF_C BFu7ll_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu15ll, BFu7ll_D_BFu15ll)
//============================================================================


struct  BFu7ll_D_BFu15s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_D_BFu15s) C1{ FL:7 FL Fs:15}



static void Test_BFu7ll_D_BFu15s()
{
  {
    init_simple_test("BFu7ll_D_BFu15s");
    static STRUCT_IF_C BFu7ll_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu15s, BFu7ll_D_BFu15s)
//============================================================================


struct  BFu7ll_D_BFu16i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_D_BFu16i) C1{ FL:7 FL Fi:16}



static void Test_BFu7ll_D_BFu16i()
{
  {
    init_simple_test("BFu7ll_D_BFu16i");
    static STRUCT_IF_C BFu7ll_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu16i, BFu7ll_D_BFu16i)
//============================================================================


struct  BFu7ll_D_BFu16ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_D_BFu16ll) C1{ FL:7 FL FL:16}



static void Test_BFu7ll_D_BFu16ll()
{
  {
    init_simple_test("BFu7ll_D_BFu16ll");
    static STRUCT_IF_C BFu7ll_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu16ll, BFu7ll_D_BFu16ll)
//============================================================================


struct  BFu7ll_D_BFu16s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_D_BFu16s) C1{ FL:7 FL Fs:16}



static void Test_BFu7ll_D_BFu16s()
{
  {
    init_simple_test("BFu7ll_D_BFu16s");
    static STRUCT_IF_C BFu7ll_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu16s, BFu7ll_D_BFu16s)
//============================================================================


struct  BFu7ll_D_BFu17i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_D_BFu17i) C1{ FL:7 FL Fi:17}



static void Test_BFu7ll_D_BFu17i()
{
  {
    init_simple_test("BFu7ll_D_BFu17i");
    static STRUCT_IF_C BFu7ll_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu17i, BFu7ll_D_BFu17i)
//============================================================================


struct  BFu7ll_D_BFu17ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_D_BFu17ll) C1{ FL:7 FL FL:17}



static void Test_BFu7ll_D_BFu17ll()
{
  {
    init_simple_test("BFu7ll_D_BFu17ll");
    static STRUCT_IF_C BFu7ll_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu17ll, BFu7ll_D_BFu17ll)
//============================================================================


struct  BFu7ll_D_BFu1c  {
  __tsu64 v1:7;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_D_BFu1c) C1{ FL:7 FL Fc:1}



static void Test_BFu7ll_D_BFu1c()
{
  {
    init_simple_test("BFu7ll_D_BFu1c");
    static STRUCT_IF_C BFu7ll_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu1c, BFu7ll_D_BFu1c)
//============================================================================


struct  BFu7ll_D_BFu1i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_D_BFu1i) C1{ FL:7 FL Fi:1}



static void Test_BFu7ll_D_BFu1i()
{
  {
    init_simple_test("BFu7ll_D_BFu1i");
    static STRUCT_IF_C BFu7ll_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu1i, BFu7ll_D_BFu1i)
//============================================================================


struct  BFu7ll_D_BFu1ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_D_BFu1ll) C1{ FL:7 FL FL:1}



static void Test_BFu7ll_D_BFu1ll()
{
  {
    init_simple_test("BFu7ll_D_BFu1ll");
    static STRUCT_IF_C BFu7ll_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu1ll, BFu7ll_D_BFu1ll)
//============================================================================


struct  BFu7ll_D_BFu1s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_D_BFu1s) C1{ FL:7 FL Fs:1}



static void Test_BFu7ll_D_BFu1s()
{
  {
    init_simple_test("BFu7ll_D_BFu1s");
    static STRUCT_IF_C BFu7ll_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu1s, BFu7ll_D_BFu1s)
//============================================================================


struct  BFu7ll_D_BFu31i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_D_BFu31i) C1{ FL:7 FL Fi:31}



static void Test_BFu7ll_D_BFu31i()
{
  {
    init_simple_test("BFu7ll_D_BFu31i");
    static STRUCT_IF_C BFu7ll_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu31i, BFu7ll_D_BFu31i)
//============================================================================


struct  BFu7ll_D_BFu31ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_D_BFu31ll) C1{ FL:7 FL FL:31}



static void Test_BFu7ll_D_BFu31ll()
{
  {
    init_simple_test("BFu7ll_D_BFu31ll");
    static STRUCT_IF_C BFu7ll_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu31ll, BFu7ll_D_BFu31ll)
//============================================================================


struct  BFu7ll_D_BFu32i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_D_BFu32i) C1{ FL:7 FL Fi:32}



static void Test_BFu7ll_D_BFu32i()
{
  {
    init_simple_test("BFu7ll_D_BFu32i");
    static STRUCT_IF_C BFu7ll_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu32i, BFu7ll_D_BFu32i)
//============================================================================


struct  BFu7ll_D_BFu32ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_D_BFu32ll) C1{ FL:7 FL FL:32}



static void Test_BFu7ll_D_BFu32ll()
{
  {
    init_simple_test("BFu7ll_D_BFu32ll");
    static STRUCT_IF_C BFu7ll_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu32ll, BFu7ll_D_BFu32ll)
//============================================================================


struct  BFu7ll_D_BFu33  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_D_BFu33) C1{ FL:7 FL FL:33}



static void Test_BFu7ll_D_BFu33()
{
  {
    init_simple_test("BFu7ll_D_BFu33");
    static STRUCT_IF_C BFu7ll_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7ll_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7ll_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu33, BFu7ll_D_BFu33)
//============================================================================


struct  BFu7ll_D_BFu7c  {
  __tsu64 v1:7;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_D_BFu7c) C1{ FL:7 FL Fc:7}



static void Test_BFu7ll_D_BFu7c()
{
  {
    init_simple_test("BFu7ll_D_BFu7c");
    static STRUCT_IF_C BFu7ll_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu7c, BFu7ll_D_BFu7c)
//============================================================================


struct  BFu7ll_D_BFu7i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_D_BFu7i) C1{ FL:7 FL Fi:7}



static void Test_BFu7ll_D_BFu7i()
{
  {
    init_simple_test("BFu7ll_D_BFu7i");
    static STRUCT_IF_C BFu7ll_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu7i, BFu7ll_D_BFu7i)
//============================================================================


struct  BFu7ll_D_BFu7ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_D_BFu7ll) C1{ FL:7 FL FL:7}



static void Test_BFu7ll_D_BFu7ll()
{
  {
    init_simple_test("BFu7ll_D_BFu7ll");
    static STRUCT_IF_C BFu7ll_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu7ll, BFu7ll_D_BFu7ll)
//============================================================================


struct  BFu7ll_D_BFu7s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_D_BFu7s) C1{ FL:7 FL Fs:7}



static void Test_BFu7ll_D_BFu7s()
{
  {
    init_simple_test("BFu7ll_D_BFu7s");
    static STRUCT_IF_C BFu7ll_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu7s, BFu7ll_D_BFu7s)
//============================================================================


struct  BFu7ll_D_BFu8c  {
  __tsu64 v1:7;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_D_BFu8c) C1{ FL:7 FL Fc:8}



static void Test_BFu7ll_D_BFu8c()
{
  {
    init_simple_test("BFu7ll_D_BFu8c");
    static STRUCT_IF_C BFu7ll_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu8c, BFu7ll_D_BFu8c)
//============================================================================


struct  BFu7ll_D_BFu8i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_D_BFu8i) C1{ FL:7 FL Fi:8}



static void Test_BFu7ll_D_BFu8i()
{
  {
    init_simple_test("BFu7ll_D_BFu8i");
    static STRUCT_IF_C BFu7ll_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu8i, BFu7ll_D_BFu8i)
//============================================================================


struct  BFu7ll_D_BFu8ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_D_BFu8ll) C1{ FL:7 FL FL:8}



static void Test_BFu7ll_D_BFu8ll()
{
  {
    init_simple_test("BFu7ll_D_BFu8ll");
    static STRUCT_IF_C BFu7ll_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu8ll, BFu7ll_D_BFu8ll)
//============================================================================


struct  BFu7ll_D_BFu8s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_D_BFu8s) C1{ FL:7 FL Fs:8}



static void Test_BFu7ll_D_BFu8s()
{
  {
    init_simple_test("BFu7ll_D_BFu8s");
    static STRUCT_IF_C BFu7ll_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu8s, BFu7ll_D_BFu8s)
//============================================================================


struct  BFu7ll_D_BFu9i  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_D_BFu9i) C1{ FL:7 FL Fi:9}



static void Test_BFu7ll_D_BFu9i()
{
  {
    init_simple_test("BFu7ll_D_BFu9i");
    static STRUCT_IF_C BFu7ll_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu9i, BFu7ll_D_BFu9i)
//============================================================================


struct  BFu7ll_D_BFu9ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_D_BFu9ll) C1{ FL:7 FL FL:9}



static void Test_BFu7ll_D_BFu9ll()
{
  {
    init_simple_test("BFu7ll_D_BFu9ll");
    static STRUCT_IF_C BFu7ll_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu9ll, BFu7ll_D_BFu9ll)
//============================================================================


struct  BFu7ll_D_BFu9s  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_D_BFu9s) C1{ FL:7 FL Fs:9}



static void Test_BFu7ll_D_BFu9s()
{
  {
    init_simple_test("BFu7ll_D_BFu9s");
    static STRUCT_IF_C BFu7ll_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_BFu9s, BFu7ll_D_BFu9s)
//============================================================================


struct  BFu7ll_D_C  {
  __tsu64 v1:7;
  double v2;
  char v3;
};
//SIG(1 BFu7ll_D_C) C1{ FL:7 FL Fc}



static void Test_BFu7ll_D_C()
{
  {
    init_simple_test("BFu7ll_D_C");
    static STRUCT_IF_C BFu7ll_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_C, BFu7ll_D_C)
//============================================================================


struct  BFu7ll_D_D  {
  __tsu64 v1:7;
  double v2;
  double v3;
};
//SIG(1 BFu7ll_D_D) C1{ FL:7 FL[2]}



static void Test_BFu7ll_D_D()
{
  {
    init_simple_test("BFu7ll_D_D");
    static STRUCT_IF_C BFu7ll_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_D, BFu7ll_D_D)
//============================================================================


struct  BFu7ll_D_F  {
  __tsu64 v1:7;
  double v2;
  float v3;
};
//SIG(1 BFu7ll_D_F) C1{ FL:7 FL Fi}



static void Test_BFu7ll_D_F()
{
  {
    init_simple_test("BFu7ll_D_F");
    static STRUCT_IF_C BFu7ll_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_F, BFu7ll_D_F)
//============================================================================


struct  BFu7ll_D_I  {
  __tsu64 v1:7;
  double v2;
  int v3;
};
//SIG(1 BFu7ll_D_I) C1{ FL:7 FL Fi}



static void Test_BFu7ll_D_I()
{
  {
    init_simple_test("BFu7ll_D_I");
    static STRUCT_IF_C BFu7ll_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_I, BFu7ll_D_I)
//============================================================================


struct  BFu7ll_D_Ip  {
  __tsu64 v1:7;
  double v2;
  int *v3;
};
//SIG(1 BFu7ll_D_Ip) C1{ FL:7 FL Fp}



static void Test_BFu7ll_D_Ip()
{
  {
    init_simple_test("BFu7ll_D_Ip");
    static STRUCT_IF_C BFu7ll_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Ip, BFu7ll_D_Ip)
//============================================================================


struct  BFu7ll_D_L  {
  __tsu64 v1:7;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_D_L) C1{ FL:7 FL[2]}



static void Test_BFu7ll_D_L()
{
  {
    init_simple_test("BFu7ll_D_L");
    static STRUCT_IF_C BFu7ll_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_L, BFu7ll_D_L)
//============================================================================


struct  BFu7ll_D_S  {
  __tsu64 v1:7;
  double v2;
  short v3;
};
//SIG(1 BFu7ll_D_S) C1{ FL:7 FL Fs}



static void Test_BFu7ll_D_S()
{
  {
    init_simple_test("BFu7ll_D_S");
    static STRUCT_IF_C BFu7ll_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_S, BFu7ll_D_S)
//============================================================================


struct  BFu7ll_D_Uc  {
  __tsu64 v1:7;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_D_Uc) C1{ FL:7 FL Fc}



static void Test_BFu7ll_D_Uc()
{
  {
    init_simple_test("BFu7ll_D_Uc");
    static STRUCT_IF_C BFu7ll_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Uc, BFu7ll_D_Uc)
//============================================================================


struct  BFu7ll_D_Ui  {
  __tsu64 v1:7;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_D_Ui) C1{ FL:7 FL Fi}



static void Test_BFu7ll_D_Ui()
{
  {
    init_simple_test("BFu7ll_D_Ui");
    static STRUCT_IF_C BFu7ll_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Ui, BFu7ll_D_Ui)
//============================================================================


struct  BFu7ll_D_Ul  {
  __tsu64 v1:7;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_D_Ul) C1{ FL:7 FL[2]}



static void Test_BFu7ll_D_Ul()
{
  {
    init_simple_test("BFu7ll_D_Ul");
    static STRUCT_IF_C BFu7ll_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Ul, BFu7ll_D_Ul)
//============================================================================


struct  BFu7ll_D_Us  {
  __tsu64 v1:7;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_D_Us) C1{ FL:7 FL Fs}



static void Test_BFu7ll_D_Us()
{
  {
    init_simple_test("BFu7ll_D_Us");
    static STRUCT_IF_C BFu7ll_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Us, BFu7ll_D_Us)
//============================================================================


struct  BFu7ll_D_Vp  {
  __tsu64 v1:7;
  double v2;
  void *v3;
};
//SIG(1 BFu7ll_D_Vp) C1{ FL:7 FL Fp}



static void Test_BFu7ll_D_Vp()
{
  {
    init_simple_test("BFu7ll_D_Vp");
    static STRUCT_IF_C BFu7ll_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_D_Vp, BFu7ll_D_Vp)
//============================================================================


struct  BFu7ll_F  {
  __tsu64 v1:7;
  float v2;
};
//SIG(1 BFu7ll_F) C1{ FL:7 Fi}



static void Test_BFu7ll_F()
{
  {
    init_simple_test("BFu7ll_F");
    static STRUCT_IF_C BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F");
    check_field_offset(lv, v2, 4, "BFu7ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F, BFu7ll_F)
//============================================================================


struct  BFu7ll_F_BFu15i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_F_BFu15i) C1{ FL:7 Fi Fi:15}



static void Test_BFu7ll_F_BFu15i()
{
  {
    init_simple_test("BFu7ll_F_BFu15i");
    static STRUCT_IF_C BFu7ll_F_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu15i, BFu7ll_F_BFu15i)
//============================================================================


struct  BFu7ll_F_BFu15ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_F_BFu15ll) C1{ FL:7 Fi FL:15}



static void Test_BFu7ll_F_BFu15ll()
{
  {
    init_simple_test("BFu7ll_F_BFu15ll");
    static STRUCT_IF_C BFu7ll_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu15ll, BFu7ll_F_BFu15ll)
//============================================================================


struct  BFu7ll_F_BFu15s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_F_BFu15s) C1{ FL:7 Fi Fs:15}



static void Test_BFu7ll_F_BFu15s()
{
  {
    init_simple_test("BFu7ll_F_BFu15s");
    static STRUCT_IF_C BFu7ll_F_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu15s, BFu7ll_F_BFu15s)
//============================================================================


struct  BFu7ll_F_BFu16i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_F_BFu16i) C1{ FL:7 Fi Fi:16}



static void Test_BFu7ll_F_BFu16i()
{
  {
    init_simple_test("BFu7ll_F_BFu16i");
    static STRUCT_IF_C BFu7ll_F_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu16i, BFu7ll_F_BFu16i)
//============================================================================


struct  BFu7ll_F_BFu16ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_F_BFu16ll) C1{ FL:7 Fi FL:16}



static void Test_BFu7ll_F_BFu16ll()
{
  {
    init_simple_test("BFu7ll_F_BFu16ll");
    static STRUCT_IF_C BFu7ll_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu16ll, BFu7ll_F_BFu16ll)
//============================================================================


struct  BFu7ll_F_BFu16s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_F_BFu16s) C1{ FL:7 Fi Fs:16}



static void Test_BFu7ll_F_BFu16s()
{
  {
    init_simple_test("BFu7ll_F_BFu16s");
    static STRUCT_IF_C BFu7ll_F_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu16s, BFu7ll_F_BFu16s)
//============================================================================


struct  BFu7ll_F_BFu17i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_F_BFu17i) C1{ FL:7 Fi Fi:17}



static void Test_BFu7ll_F_BFu17i()
{
  {
    init_simple_test("BFu7ll_F_BFu17i");
    static STRUCT_IF_C BFu7ll_F_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu17i, BFu7ll_F_BFu17i)
//============================================================================


struct  BFu7ll_F_BFu17ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_F_BFu17ll) C1{ FL:7 Fi FL:17}



static void Test_BFu7ll_F_BFu17ll()
{
  {
    init_simple_test("BFu7ll_F_BFu17ll");
    static STRUCT_IF_C BFu7ll_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu17ll, BFu7ll_F_BFu17ll)
//============================================================================


struct  BFu7ll_F_BFu1c  {
  __tsu64 v1:7;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_F_BFu1c) C1{ FL:7 Fi Fc:1}



static void Test_BFu7ll_F_BFu1c()
{
  {
    init_simple_test("BFu7ll_F_BFu1c");
    static STRUCT_IF_C BFu7ll_F_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu1c, BFu7ll_F_BFu1c)
//============================================================================


struct  BFu7ll_F_BFu1i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_F_BFu1i) C1{ FL:7 Fi Fi:1}



static void Test_BFu7ll_F_BFu1i()
{
  {
    init_simple_test("BFu7ll_F_BFu1i");
    static STRUCT_IF_C BFu7ll_F_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu1i, BFu7ll_F_BFu1i)
//============================================================================


struct  BFu7ll_F_BFu1ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_F_BFu1ll) C1{ FL:7 Fi FL:1}



static void Test_BFu7ll_F_BFu1ll()
{
  {
    init_simple_test("BFu7ll_F_BFu1ll");
    static STRUCT_IF_C BFu7ll_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu1ll, BFu7ll_F_BFu1ll)
//============================================================================


struct  BFu7ll_F_BFu1s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_F_BFu1s) C1{ FL:7 Fi Fs:1}



static void Test_BFu7ll_F_BFu1s()
{
  {
    init_simple_test("BFu7ll_F_BFu1s");
    static STRUCT_IF_C BFu7ll_F_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu1s, BFu7ll_F_BFu1s)
//============================================================================


struct  BFu7ll_F_BFu31i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_F_BFu31i) C1{ FL:7 Fi Fi:31}



static void Test_BFu7ll_F_BFu31i()
{
  {
    init_simple_test("BFu7ll_F_BFu31i");
    static STRUCT_IF_C BFu7ll_F_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu31i, BFu7ll_F_BFu31i)
//============================================================================


struct  BFu7ll_F_BFu31ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_F_BFu31ll) C1{ FL:7 Fi FL:31}



static void Test_BFu7ll_F_BFu31ll()
{
  {
    init_simple_test("BFu7ll_F_BFu31ll");
    static STRUCT_IF_C BFu7ll_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu31ll, BFu7ll_F_BFu31ll)
//============================================================================


struct  BFu7ll_F_BFu32i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_F_BFu32i) C1{ FL:7 Fi Fi:32}



static void Test_BFu7ll_F_BFu32i()
{
  {
    init_simple_test("BFu7ll_F_BFu32i");
    static STRUCT_IF_C BFu7ll_F_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu32i, BFu7ll_F_BFu32i)
//============================================================================


struct  BFu7ll_F_BFu32ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_F_BFu32ll) C1{ FL:7 Fi FL:32}



static void Test_BFu7ll_F_BFu32ll()
{
  {
    init_simple_test("BFu7ll_F_BFu32ll");
    static STRUCT_IF_C BFu7ll_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu32ll, BFu7ll_F_BFu32ll)
//============================================================================


struct  BFu7ll_F_BFu33  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_F_BFu33) C1{ FL:7 Fi FL:33}



static void Test_BFu7ll_F_BFu33()
{
  {
    init_simple_test("BFu7ll_F_BFu33");
    static STRUCT_IF_C BFu7ll_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7ll_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7ll_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu33, BFu7ll_F_BFu33)
//============================================================================


struct  BFu7ll_F_BFu7c  {
  __tsu64 v1:7;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_F_BFu7c) C1{ FL:7 Fi Fc:7}



static void Test_BFu7ll_F_BFu7c()
{
  {
    init_simple_test("BFu7ll_F_BFu7c");
    static STRUCT_IF_C BFu7ll_F_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu7c, BFu7ll_F_BFu7c)
//============================================================================


struct  BFu7ll_F_BFu7i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_F_BFu7i) C1{ FL:7 Fi Fi:7}



static void Test_BFu7ll_F_BFu7i()
{
  {
    init_simple_test("BFu7ll_F_BFu7i");
    static STRUCT_IF_C BFu7ll_F_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu7i, BFu7ll_F_BFu7i)
//============================================================================


struct  BFu7ll_F_BFu7ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_F_BFu7ll) C1{ FL:7 Fi FL:7}



static void Test_BFu7ll_F_BFu7ll()
{
  {
    init_simple_test("BFu7ll_F_BFu7ll");
    static STRUCT_IF_C BFu7ll_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu7ll, BFu7ll_F_BFu7ll)
//============================================================================


struct  BFu7ll_F_BFu7s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_F_BFu7s) C1{ FL:7 Fi Fs:7}



static void Test_BFu7ll_F_BFu7s()
{
  {
    init_simple_test("BFu7ll_F_BFu7s");
    static STRUCT_IF_C BFu7ll_F_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu7s, BFu7ll_F_BFu7s)
//============================================================================


struct  BFu7ll_F_BFu8c  {
  __tsu64 v1:7;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_F_BFu8c) C1{ FL:7 Fi Fc:8}



static void Test_BFu7ll_F_BFu8c()
{
  {
    init_simple_test("BFu7ll_F_BFu8c");
    static STRUCT_IF_C BFu7ll_F_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu8c, BFu7ll_F_BFu8c)
//============================================================================


struct  BFu7ll_F_BFu8i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_F_BFu8i) C1{ FL:7 Fi Fi:8}



static void Test_BFu7ll_F_BFu8i()
{
  {
    init_simple_test("BFu7ll_F_BFu8i");
    static STRUCT_IF_C BFu7ll_F_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu8i, BFu7ll_F_BFu8i)
//============================================================================


struct  BFu7ll_F_BFu8ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_F_BFu8ll) C1{ FL:7 Fi FL:8}



static void Test_BFu7ll_F_BFu8ll()
{
  {
    init_simple_test("BFu7ll_F_BFu8ll");
    static STRUCT_IF_C BFu7ll_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu8ll, BFu7ll_F_BFu8ll)
//============================================================================


struct  BFu7ll_F_BFu8s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_F_BFu8s) C1{ FL:7 Fi Fs:8}



static void Test_BFu7ll_F_BFu8s()
{
  {
    init_simple_test("BFu7ll_F_BFu8s");
    static STRUCT_IF_C BFu7ll_F_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu8s, BFu7ll_F_BFu8s)
//============================================================================


struct  BFu7ll_F_BFu9i  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_F_BFu9i) C1{ FL:7 Fi Fi:9}



static void Test_BFu7ll_F_BFu9i()
{
  {
    init_simple_test("BFu7ll_F_BFu9i");
    static STRUCT_IF_C BFu7ll_F_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu9i, BFu7ll_F_BFu9i)
//============================================================================


struct  BFu7ll_F_BFu9ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_F_BFu9ll) C1{ FL:7 Fi FL:9}



static void Test_BFu7ll_F_BFu9ll()
{
  {
    init_simple_test("BFu7ll_F_BFu9ll");
    static STRUCT_IF_C BFu7ll_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu9ll, BFu7ll_F_BFu9ll)
//============================================================================


struct  BFu7ll_F_BFu9s  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_F_BFu9s) C1{ FL:7 Fi Fs:9}



static void Test_BFu7ll_F_BFu9s()
{
  {
    init_simple_test("BFu7ll_F_BFu9s");
    static STRUCT_IF_C BFu7ll_F_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_BFu9s, BFu7ll_F_BFu9s)
//============================================================================


struct  BFu7ll_F_C  {
  __tsu64 v1:7;
  float v2;
  char v3;
};
//SIG(1 BFu7ll_F_C) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_F_C()
{
  {
    init_simple_test("BFu7ll_F_C");
    static STRUCT_IF_C BFu7ll_F_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_C");
    check_field_offset(lv, v2, 4, "BFu7ll_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_C, BFu7ll_F_C)
//============================================================================


struct  BFu7ll_F_D  {
  __tsu64 v1:7;
  float v2;
  double v3;
};
//SIG(1 BFu7ll_F_D) C1{ FL:7 Fi FL}



static void Test_BFu7ll_F_D()
{
  {
    init_simple_test("BFu7ll_F_D");
    static STRUCT_IF_C BFu7ll_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_D");
    check_field_offset(lv, v2, 4, "BFu7ll_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_D, BFu7ll_F_D)
//============================================================================


struct  BFu7ll_F_F  {
  __tsu64 v1:7;
  float v2;
  float v3;
};
//SIG(1 BFu7ll_F_F) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_F_F()
{
  {
    init_simple_test("BFu7ll_F_F");
    static STRUCT_IF_C BFu7ll_F_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_F");
    check_field_offset(lv, v2, 4, "BFu7ll_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_F, BFu7ll_F_F)
//============================================================================


struct  BFu7ll_F_I  {
  __tsu64 v1:7;
  float v2;
  int v3;
};
//SIG(1 BFu7ll_F_I) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_F_I()
{
  {
    init_simple_test("BFu7ll_F_I");
    static STRUCT_IF_C BFu7ll_F_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_I");
    check_field_offset(lv, v2, 4, "BFu7ll_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_I, BFu7ll_F_I)
//============================================================================


struct  BFu7ll_F_Ip  {
  __tsu64 v1:7;
  float v2;
  int *v3;
};
//SIG(1 BFu7ll_F_Ip) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_F_Ip()
{
  {
    init_simple_test("BFu7ll_F_Ip");
    static STRUCT_IF_C BFu7ll_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Ip");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Ip, BFu7ll_F_Ip)
//============================================================================


struct  BFu7ll_F_L  {
  __tsu64 v1:7;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_F_L) C1{ FL:7 Fi FL}



static void Test_BFu7ll_F_L()
{
  {
    init_simple_test("BFu7ll_F_L");
    static STRUCT_IF_C BFu7ll_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_L");
    check_field_offset(lv, v2, 4, "BFu7ll_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_L, BFu7ll_F_L)
//============================================================================


struct  BFu7ll_F_S  {
  __tsu64 v1:7;
  float v2;
  short v3;
};
//SIG(1 BFu7ll_F_S) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_F_S()
{
  {
    init_simple_test("BFu7ll_F_S");
    static STRUCT_IF_C BFu7ll_F_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_S");
    check_field_offset(lv, v2, 4, "BFu7ll_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_S, BFu7ll_F_S)
//============================================================================


struct  BFu7ll_F_Uc  {
  __tsu64 v1:7;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_F_Uc) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_F_Uc()
{
  {
    init_simple_test("BFu7ll_F_Uc");
    static STRUCT_IF_C BFu7ll_F_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Uc");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Uc, BFu7ll_F_Uc)
//============================================================================


struct  BFu7ll_F_Ui  {
  __tsu64 v1:7;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_F_Ui) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_F_Ui()
{
  {
    init_simple_test("BFu7ll_F_Ui");
    static STRUCT_IF_C BFu7ll_F_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Ui, BFu7ll_F_Ui)
//============================================================================


struct  BFu7ll_F_Ul  {
  __tsu64 v1:7;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_F_Ul) C1{ FL:7 Fi FL}



static void Test_BFu7ll_F_Ul()
{
  {
    init_simple_test("BFu7ll_F_Ul");
    static STRUCT_IF_C BFu7ll_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Ul");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Ul, BFu7ll_F_Ul)
//============================================================================


struct  BFu7ll_F_Us  {
  __tsu64 v1:7;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_F_Us) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_F_Us()
{
  {
    init_simple_test("BFu7ll_F_Us");
    static STRUCT_IF_C BFu7ll_F_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Us");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Us, BFu7ll_F_Us)
//============================================================================


struct  BFu7ll_F_Vp  {
  __tsu64 v1:7;
  float v2;
  void *v3;
};
//SIG(1 BFu7ll_F_Vp) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_F_Vp()
{
  {
    init_simple_test("BFu7ll_F_Vp");
    static STRUCT_IF_C BFu7ll_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_Vp");
    check_field_offset(lv, v2, 4, "BFu7ll_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_F_Vp, BFu7ll_F_Vp)
//============================================================================


struct  BFu7ll_I  {
  __tsu64 v1:7;
  int v2;
};
//SIG(1 BFu7ll_I) C1{ FL:7 Fi}



static void Test_BFu7ll_I()
{
  {
    init_simple_test("BFu7ll_I");
    static STRUCT_IF_C BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I");
    check_field_offset(lv, v2, 4, "BFu7ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I, BFu7ll_I)
//============================================================================


struct  BFu7ll_I_BFu15i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_I_BFu15i) C1{ FL:7 Fi Fi:15}



static void Test_BFu7ll_I_BFu15i()
{
  {
    init_simple_test("BFu7ll_I_BFu15i");
    static STRUCT_IF_C BFu7ll_I_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu15i, BFu7ll_I_BFu15i)
//============================================================================


struct  BFu7ll_I_BFu15ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_I_BFu15ll) C1{ FL:7 Fi FL:15}



static void Test_BFu7ll_I_BFu15ll()
{
  {
    init_simple_test("BFu7ll_I_BFu15ll");
    static STRUCT_IF_C BFu7ll_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu15ll, BFu7ll_I_BFu15ll)
//============================================================================


struct  BFu7ll_I_BFu15s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_I_BFu15s) C1{ FL:7 Fi Fs:15}



static void Test_BFu7ll_I_BFu15s()
{
  {
    init_simple_test("BFu7ll_I_BFu15s");
    static STRUCT_IF_C BFu7ll_I_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu15s, BFu7ll_I_BFu15s)
//============================================================================


struct  BFu7ll_I_BFu16i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_I_BFu16i) C1{ FL:7 Fi Fi:16}



static void Test_BFu7ll_I_BFu16i()
{
  {
    init_simple_test("BFu7ll_I_BFu16i");
    static STRUCT_IF_C BFu7ll_I_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu16i, BFu7ll_I_BFu16i)
//============================================================================


struct  BFu7ll_I_BFu16ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_I_BFu16ll) C1{ FL:7 Fi FL:16}



static void Test_BFu7ll_I_BFu16ll()
{
  {
    init_simple_test("BFu7ll_I_BFu16ll");
    static STRUCT_IF_C BFu7ll_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu16ll, BFu7ll_I_BFu16ll)
//============================================================================


struct  BFu7ll_I_BFu16s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_I_BFu16s) C1{ FL:7 Fi Fs:16}



static void Test_BFu7ll_I_BFu16s()
{
  {
    init_simple_test("BFu7ll_I_BFu16s");
    static STRUCT_IF_C BFu7ll_I_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu16s, BFu7ll_I_BFu16s)
//============================================================================


struct  BFu7ll_I_BFu17i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_I_BFu17i) C1{ FL:7 Fi Fi:17}



static void Test_BFu7ll_I_BFu17i()
{
  {
    init_simple_test("BFu7ll_I_BFu17i");
    static STRUCT_IF_C BFu7ll_I_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu17i, BFu7ll_I_BFu17i)
//============================================================================


struct  BFu7ll_I_BFu17ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_I_BFu17ll) C1{ FL:7 Fi FL:17}



static void Test_BFu7ll_I_BFu17ll()
{
  {
    init_simple_test("BFu7ll_I_BFu17ll");
    static STRUCT_IF_C BFu7ll_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu17ll, BFu7ll_I_BFu17ll)
//============================================================================


struct  BFu7ll_I_BFu1c  {
  __tsu64 v1:7;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_I_BFu1c) C1{ FL:7 Fi Fc:1}



static void Test_BFu7ll_I_BFu1c()
{
  {
    init_simple_test("BFu7ll_I_BFu1c");
    static STRUCT_IF_C BFu7ll_I_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu1c, BFu7ll_I_BFu1c)
//============================================================================


struct  BFu7ll_I_BFu1i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_I_BFu1i) C1{ FL:7 Fi Fi:1}



static void Test_BFu7ll_I_BFu1i()
{
  {
    init_simple_test("BFu7ll_I_BFu1i");
    static STRUCT_IF_C BFu7ll_I_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu1i, BFu7ll_I_BFu1i)
//============================================================================


struct  BFu7ll_I_BFu1ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_I_BFu1ll) C1{ FL:7 Fi FL:1}



static void Test_BFu7ll_I_BFu1ll()
{
  {
    init_simple_test("BFu7ll_I_BFu1ll");
    static STRUCT_IF_C BFu7ll_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu1ll, BFu7ll_I_BFu1ll)
//============================================================================


struct  BFu7ll_I_BFu1s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_I_BFu1s) C1{ FL:7 Fi Fs:1}



static void Test_BFu7ll_I_BFu1s()
{
  {
    init_simple_test("BFu7ll_I_BFu1s");
    static STRUCT_IF_C BFu7ll_I_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu1s, BFu7ll_I_BFu1s)
//============================================================================


struct  BFu7ll_I_BFu31i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_I_BFu31i) C1{ FL:7 Fi Fi:31}



static void Test_BFu7ll_I_BFu31i()
{
  {
    init_simple_test("BFu7ll_I_BFu31i");
    static STRUCT_IF_C BFu7ll_I_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu31i, BFu7ll_I_BFu31i)
//============================================================================


struct  BFu7ll_I_BFu31ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_I_BFu31ll) C1{ FL:7 Fi FL:31}



static void Test_BFu7ll_I_BFu31ll()
{
  {
    init_simple_test("BFu7ll_I_BFu31ll");
    static STRUCT_IF_C BFu7ll_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu31ll, BFu7ll_I_BFu31ll)
//============================================================================


struct  BFu7ll_I_BFu32i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_I_BFu32i) C1{ FL:7 Fi Fi:32}



static void Test_BFu7ll_I_BFu32i()
{
  {
    init_simple_test("BFu7ll_I_BFu32i");
    static STRUCT_IF_C BFu7ll_I_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu32i, BFu7ll_I_BFu32i)
//============================================================================


struct  BFu7ll_I_BFu32ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_I_BFu32ll) C1{ FL:7 Fi FL:32}



static void Test_BFu7ll_I_BFu32ll()
{
  {
    init_simple_test("BFu7ll_I_BFu32ll");
    static STRUCT_IF_C BFu7ll_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu32ll, BFu7ll_I_BFu32ll)
//============================================================================


struct  BFu7ll_I_BFu33  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_I_BFu33) C1{ FL:7 Fi FL:33}



static void Test_BFu7ll_I_BFu33()
{
  {
    init_simple_test("BFu7ll_I_BFu33");
    static STRUCT_IF_C BFu7ll_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7ll_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7ll_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu33, BFu7ll_I_BFu33)
//============================================================================


struct  BFu7ll_I_BFu7c  {
  __tsu64 v1:7;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_I_BFu7c) C1{ FL:7 Fi Fc:7}



static void Test_BFu7ll_I_BFu7c()
{
  {
    init_simple_test("BFu7ll_I_BFu7c");
    static STRUCT_IF_C BFu7ll_I_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu7c, BFu7ll_I_BFu7c)
//============================================================================


struct  BFu7ll_I_BFu7i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_I_BFu7i) C1{ FL:7 Fi Fi:7}



static void Test_BFu7ll_I_BFu7i()
{
  {
    init_simple_test("BFu7ll_I_BFu7i");
    static STRUCT_IF_C BFu7ll_I_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu7i, BFu7ll_I_BFu7i)
//============================================================================


struct  BFu7ll_I_BFu7ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_I_BFu7ll) C1{ FL:7 Fi FL:7}



static void Test_BFu7ll_I_BFu7ll()
{
  {
    init_simple_test("BFu7ll_I_BFu7ll");
    static STRUCT_IF_C BFu7ll_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu7ll, BFu7ll_I_BFu7ll)
//============================================================================


struct  BFu7ll_I_BFu7s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_I_BFu7s) C1{ FL:7 Fi Fs:7}



static void Test_BFu7ll_I_BFu7s()
{
  {
    init_simple_test("BFu7ll_I_BFu7s");
    static STRUCT_IF_C BFu7ll_I_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu7s, BFu7ll_I_BFu7s)
//============================================================================


struct  BFu7ll_I_BFu8c  {
  __tsu64 v1:7;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_I_BFu8c) C1{ FL:7 Fi Fc:8}



static void Test_BFu7ll_I_BFu8c()
{
  {
    init_simple_test("BFu7ll_I_BFu8c");
    static STRUCT_IF_C BFu7ll_I_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu8c, BFu7ll_I_BFu8c)
//============================================================================


struct  BFu7ll_I_BFu8i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_I_BFu8i) C1{ FL:7 Fi Fi:8}



static void Test_BFu7ll_I_BFu8i()
{
  {
    init_simple_test("BFu7ll_I_BFu8i");
    static STRUCT_IF_C BFu7ll_I_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu8i, BFu7ll_I_BFu8i)
//============================================================================


struct  BFu7ll_I_BFu8ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_I_BFu8ll) C1{ FL:7 Fi FL:8}



static void Test_BFu7ll_I_BFu8ll()
{
  {
    init_simple_test("BFu7ll_I_BFu8ll");
    static STRUCT_IF_C BFu7ll_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu8ll, BFu7ll_I_BFu8ll)
//============================================================================


struct  BFu7ll_I_BFu8s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_I_BFu8s) C1{ FL:7 Fi Fs:8}



static void Test_BFu7ll_I_BFu8s()
{
  {
    init_simple_test("BFu7ll_I_BFu8s");
    static STRUCT_IF_C BFu7ll_I_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu8s, BFu7ll_I_BFu8s)
//============================================================================


struct  BFu7ll_I_BFu9i  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_I_BFu9i) C1{ FL:7 Fi Fi:9}



static void Test_BFu7ll_I_BFu9i()
{
  {
    init_simple_test("BFu7ll_I_BFu9i");
    static STRUCT_IF_C BFu7ll_I_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu9i, BFu7ll_I_BFu9i)
//============================================================================


struct  BFu7ll_I_BFu9ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_I_BFu9ll) C1{ FL:7 Fi FL:9}



static void Test_BFu7ll_I_BFu9ll()
{
  {
    init_simple_test("BFu7ll_I_BFu9ll");
    static STRUCT_IF_C BFu7ll_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu9ll, BFu7ll_I_BFu9ll)
//============================================================================


struct  BFu7ll_I_BFu9s  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_I_BFu9s) C1{ FL:7 Fi Fs:9}



static void Test_BFu7ll_I_BFu9s()
{
  {
    init_simple_test("BFu7ll_I_BFu9s");
    static STRUCT_IF_C BFu7ll_I_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_BFu9s, BFu7ll_I_BFu9s)
//============================================================================


struct  BFu7ll_I_C  {
  __tsu64 v1:7;
  int v2;
  char v3;
};
//SIG(1 BFu7ll_I_C) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_I_C()
{
  {
    init_simple_test("BFu7ll_I_C");
    static STRUCT_IF_C BFu7ll_I_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_C");
    check_field_offset(lv, v2, 4, "BFu7ll_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_C, BFu7ll_I_C)
//============================================================================


struct  BFu7ll_I_D  {
  __tsu64 v1:7;
  int v2;
  double v3;
};
//SIG(1 BFu7ll_I_D) C1{ FL:7 Fi FL}



static void Test_BFu7ll_I_D()
{
  {
    init_simple_test("BFu7ll_I_D");
    static STRUCT_IF_C BFu7ll_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_D");
    check_field_offset(lv, v2, 4, "BFu7ll_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_D, BFu7ll_I_D)
//============================================================================


struct  BFu7ll_I_F  {
  __tsu64 v1:7;
  int v2;
  float v3;
};
//SIG(1 BFu7ll_I_F) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_I_F()
{
  {
    init_simple_test("BFu7ll_I_F");
    static STRUCT_IF_C BFu7ll_I_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_F");
    check_field_offset(lv, v2, 4, "BFu7ll_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_F, BFu7ll_I_F)
//============================================================================


struct  BFu7ll_I_I  {
  __tsu64 v1:7;
  int v2;
  int v3;
};
//SIG(1 BFu7ll_I_I) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_I_I()
{
  {
    init_simple_test("BFu7ll_I_I");
    static STRUCT_IF_C BFu7ll_I_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_I");
    check_field_offset(lv, v2, 4, "BFu7ll_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_I, BFu7ll_I_I)
//============================================================================


struct  BFu7ll_I_Ip  {
  __tsu64 v1:7;
  int v2;
  int *v3;
};
//SIG(1 BFu7ll_I_Ip) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_I_Ip()
{
  {
    init_simple_test("BFu7ll_I_Ip");
    static STRUCT_IF_C BFu7ll_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Ip");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Ip, BFu7ll_I_Ip)
//============================================================================


struct  BFu7ll_I_L  {
  __tsu64 v1:7;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_I_L) C1{ FL:7 Fi FL}



static void Test_BFu7ll_I_L()
{
  {
    init_simple_test("BFu7ll_I_L");
    static STRUCT_IF_C BFu7ll_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_L");
    check_field_offset(lv, v2, 4, "BFu7ll_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_L, BFu7ll_I_L)
//============================================================================


struct  BFu7ll_I_S  {
  __tsu64 v1:7;
  int v2;
  short v3;
};
//SIG(1 BFu7ll_I_S) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_I_S()
{
  {
    init_simple_test("BFu7ll_I_S");
    static STRUCT_IF_C BFu7ll_I_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_S");
    check_field_offset(lv, v2, 4, "BFu7ll_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_S, BFu7ll_I_S)
//============================================================================


struct  BFu7ll_I_Uc  {
  __tsu64 v1:7;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_I_Uc) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_I_Uc()
{
  {
    init_simple_test("BFu7ll_I_Uc");
    static STRUCT_IF_C BFu7ll_I_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Uc");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Uc, BFu7ll_I_Uc)
//============================================================================


struct  BFu7ll_I_Ui  {
  __tsu64 v1:7;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_I_Ui) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_I_Ui()
{
  {
    init_simple_test("BFu7ll_I_Ui");
    static STRUCT_IF_C BFu7ll_I_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Ui, BFu7ll_I_Ui)
//============================================================================


struct  BFu7ll_I_Ul  {
  __tsu64 v1:7;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_I_Ul) C1{ FL:7 Fi FL}



static void Test_BFu7ll_I_Ul()
{
  {
    init_simple_test("BFu7ll_I_Ul");
    static STRUCT_IF_C BFu7ll_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Ul");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Ul, BFu7ll_I_Ul)
//============================================================================


struct  BFu7ll_I_Us  {
  __tsu64 v1:7;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_I_Us) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_I_Us()
{
  {
    init_simple_test("BFu7ll_I_Us");
    static STRUCT_IF_C BFu7ll_I_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Us");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Us, BFu7ll_I_Us)
//============================================================================


struct  BFu7ll_I_Vp  {
  __tsu64 v1:7;
  int v2;
  void *v3;
};
//SIG(1 BFu7ll_I_Vp) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_I_Vp()
{
  {
    init_simple_test("BFu7ll_I_Vp");
    static STRUCT_IF_C BFu7ll_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_Vp");
    check_field_offset(lv, v2, 4, "BFu7ll_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_I_Vp, BFu7ll_I_Vp)
//============================================================================


struct  BFu7ll_Ip  {
  __tsu64 v1:7;
  int *v2;
};
//SIG(1 BFu7ll_Ip) C1{ FL:7 Fp}



static void Test_BFu7ll_Ip()
{
  {
    init_simple_test("BFu7ll_Ip");
    static STRUCT_IF_C BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip, BFu7ll_Ip)
//============================================================================


struct  BFu7ll_Ip_BFu15i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Ip_BFu15i) C1{ FL:7 Fp Fi:15}



static void Test_BFu7ll_Ip_BFu15i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu15i");
    static STRUCT_IF_C BFu7ll_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu15i, BFu7ll_Ip_BFu15i)
//============================================================================


struct  BFu7ll_Ip_BFu15ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Ip_BFu15ll) C1{ FL:7 Fp FL:15}



static void Test_BFu7ll_Ip_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu15ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu15ll, BFu7ll_Ip_BFu15ll)
//============================================================================


struct  BFu7ll_Ip_BFu15s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Ip_BFu15s) C1{ FL:7 Fp Fs:15}



static void Test_BFu7ll_Ip_BFu15s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu15s");
    static STRUCT_IF_C BFu7ll_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu15s, BFu7ll_Ip_BFu15s)
//============================================================================


struct  BFu7ll_Ip_BFu16i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Ip_BFu16i) C1{ FL:7 Fp Fi:16}



static void Test_BFu7ll_Ip_BFu16i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu16i");
    static STRUCT_IF_C BFu7ll_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu16i, BFu7ll_Ip_BFu16i)
//============================================================================


struct  BFu7ll_Ip_BFu16ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Ip_BFu16ll) C1{ FL:7 Fp FL:16}



static void Test_BFu7ll_Ip_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu16ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu16ll, BFu7ll_Ip_BFu16ll)
//============================================================================


struct  BFu7ll_Ip_BFu16s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Ip_BFu16s) C1{ FL:7 Fp Fs:16}



static void Test_BFu7ll_Ip_BFu16s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu16s");
    static STRUCT_IF_C BFu7ll_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu16s, BFu7ll_Ip_BFu16s)
//============================================================================


struct  BFu7ll_Ip_BFu17i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Ip_BFu17i) C1{ FL:7 Fp Fi:17}



static void Test_BFu7ll_Ip_BFu17i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu17i");
    static STRUCT_IF_C BFu7ll_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7ll_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7ll_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu17i, BFu7ll_Ip_BFu17i)
//============================================================================


struct  BFu7ll_Ip_BFu17ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Ip_BFu17ll) C1{ FL:7 Fp FL:17}



static void Test_BFu7ll_Ip_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu17ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7ll_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7ll_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu17ll, BFu7ll_Ip_BFu17ll)
//============================================================================


struct  BFu7ll_Ip_BFu1c  {
  __tsu64 v1:7;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Ip_BFu1c) C1{ FL:7 Fp Fc:1}



static void Test_BFu7ll_Ip_BFu1c()
{
  {
    init_simple_test("BFu7ll_Ip_BFu1c");
    static STRUCT_IF_C BFu7ll_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu1c, BFu7ll_Ip_BFu1c)
//============================================================================


struct  BFu7ll_Ip_BFu1i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Ip_BFu1i) C1{ FL:7 Fp Fi:1}



static void Test_BFu7ll_Ip_BFu1i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu1i");
    static STRUCT_IF_C BFu7ll_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu1i, BFu7ll_Ip_BFu1i)
//============================================================================


struct  BFu7ll_Ip_BFu1ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Ip_BFu1ll) C1{ FL:7 Fp FL:1}



static void Test_BFu7ll_Ip_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu1ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu1ll, BFu7ll_Ip_BFu1ll)
//============================================================================


struct  BFu7ll_Ip_BFu1s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Ip_BFu1s) C1{ FL:7 Fp Fs:1}



static void Test_BFu7ll_Ip_BFu1s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu1s");
    static STRUCT_IF_C BFu7ll_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu1s, BFu7ll_Ip_BFu1s)
//============================================================================


struct  BFu7ll_Ip_BFu31i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Ip_BFu31i) C1{ FL:7 Fp Fi:31}



static void Test_BFu7ll_Ip_BFu31i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu31i");
    static STRUCT_IF_C BFu7ll_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7ll_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7ll_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu31i, BFu7ll_Ip_BFu31i)
//============================================================================


struct  BFu7ll_Ip_BFu31ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Ip_BFu31ll) C1{ FL:7 Fp FL:31}



static void Test_BFu7ll_Ip_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu31ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7ll_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7ll_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu31ll, BFu7ll_Ip_BFu31ll)
//============================================================================


struct  BFu7ll_Ip_BFu32i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Ip_BFu32i) C1{ FL:7 Fp Fi:32}



static void Test_BFu7ll_Ip_BFu32i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu32i");
    static STRUCT_IF_C BFu7ll_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7ll_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7ll_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu32i, BFu7ll_Ip_BFu32i)
//============================================================================


struct  BFu7ll_Ip_BFu32ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Ip_BFu32ll) C1{ FL:7 Fp FL:32}



static void Test_BFu7ll_Ip_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu32ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7ll_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7ll_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu32ll, BFu7ll_Ip_BFu32ll)
//============================================================================


struct  BFu7ll_Ip_BFu33  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Ip_BFu33) C1{ FL:7 Fp FL:33}



static void Test_BFu7ll_Ip_BFu33()
{
  {
    init_simple_test("BFu7ll_Ip_BFu33");
    static STRUCT_IF_C BFu7ll_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7ll_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7ll_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu33, BFu7ll_Ip_BFu33)
//============================================================================


struct  BFu7ll_Ip_BFu7c  {
  __tsu64 v1:7;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Ip_BFu7c) C1{ FL:7 Fp Fc:7}



static void Test_BFu7ll_Ip_BFu7c()
{
  {
    init_simple_test("BFu7ll_Ip_BFu7c");
    static STRUCT_IF_C BFu7ll_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu7c, BFu7ll_Ip_BFu7c)
//============================================================================


struct  BFu7ll_Ip_BFu7i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Ip_BFu7i) C1{ FL:7 Fp Fi:7}



static void Test_BFu7ll_Ip_BFu7i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu7i");
    static STRUCT_IF_C BFu7ll_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu7i, BFu7ll_Ip_BFu7i)
//============================================================================


struct  BFu7ll_Ip_BFu7ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Ip_BFu7ll) C1{ FL:7 Fp FL:7}



static void Test_BFu7ll_Ip_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu7ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu7ll, BFu7ll_Ip_BFu7ll)
//============================================================================


struct  BFu7ll_Ip_BFu7s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Ip_BFu7s) C1{ FL:7 Fp Fs:7}



static void Test_BFu7ll_Ip_BFu7s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu7s");
    static STRUCT_IF_C BFu7ll_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu7s, BFu7ll_Ip_BFu7s)
//============================================================================


struct  BFu7ll_Ip_BFu8c  {
  __tsu64 v1:7;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Ip_BFu8c) C1{ FL:7 Fp Fc:8}



static void Test_BFu7ll_Ip_BFu8c()
{
  {
    init_simple_test("BFu7ll_Ip_BFu8c");
    static STRUCT_IF_C BFu7ll_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu8c, BFu7ll_Ip_BFu8c)
//============================================================================


struct  BFu7ll_Ip_BFu8i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Ip_BFu8i) C1{ FL:7 Fp Fi:8}



static void Test_BFu7ll_Ip_BFu8i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu8i");
    static STRUCT_IF_C BFu7ll_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu8i, BFu7ll_Ip_BFu8i)
//============================================================================


struct  BFu7ll_Ip_BFu8ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Ip_BFu8ll) C1{ FL:7 Fp FL:8}



static void Test_BFu7ll_Ip_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu8ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu8ll, BFu7ll_Ip_BFu8ll)
//============================================================================


struct  BFu7ll_Ip_BFu8s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Ip_BFu8s) C1{ FL:7 Fp Fs:8}



static void Test_BFu7ll_Ip_BFu8s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu8s");
    static STRUCT_IF_C BFu7ll_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu8s, BFu7ll_Ip_BFu8s)
//============================================================================


struct  BFu7ll_Ip_BFu9i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Ip_BFu9i) C1{ FL:7 Fp Fi:9}



static void Test_BFu7ll_Ip_BFu9i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu9i");
    static STRUCT_IF_C BFu7ll_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu9i, BFu7ll_Ip_BFu9i)
//============================================================================


struct  BFu7ll_Ip_BFu9ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Ip_BFu9ll) C1{ FL:7 Fp FL:9}



static void Test_BFu7ll_Ip_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu9ll");
    static STRUCT_IF_C BFu7ll_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu9ll, BFu7ll_Ip_BFu9ll)
//============================================================================


struct  BFu7ll_Ip_BFu9s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Ip_BFu9s) C1{ FL:7 Fp Fs:9}



static void Test_BFu7ll_Ip_BFu9s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu9s");
    static STRUCT_IF_C BFu7ll_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_BFu9s, BFu7ll_Ip_BFu9s)
//============================================================================


struct  BFu7ll_Ip_C  {
  __tsu64 v1:7;
  int *v2;
  char v3;
};
//SIG(1 BFu7ll_Ip_C) C1{ FL:7 Fp Fc}



static void Test_BFu7ll_Ip_C()
{
  {
    init_simple_test("BFu7ll_Ip_C");
    static STRUCT_IF_C BFu7ll_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_C, BFu7ll_Ip_C)
//============================================================================


struct  BFu7ll_Ip_D  {
  __tsu64 v1:7;
  int *v2;
  double v3;
};
//SIG(1 BFu7ll_Ip_D) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Ip_D()
{
  {
    init_simple_test("BFu7ll_Ip_D");
    static STRUCT_IF_C BFu7ll_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_D, BFu7ll_Ip_D)
//============================================================================


struct  BFu7ll_Ip_F  {
  __tsu64 v1:7;
  int *v2;
  float v3;
};
//SIG(1 BFu7ll_Ip_F) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Ip_F()
{
  {
    init_simple_test("BFu7ll_Ip_F");
    static STRUCT_IF_C BFu7ll_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_F, BFu7ll_Ip_F)
//============================================================================


struct  BFu7ll_Ip_I  {
  __tsu64 v1:7;
  int *v2;
  int v3;
};
//SIG(1 BFu7ll_Ip_I) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Ip_I()
{
  {
    init_simple_test("BFu7ll_Ip_I");
    static STRUCT_IF_C BFu7ll_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_I, BFu7ll_Ip_I)
//============================================================================


struct  BFu7ll_Ip_Ip  {
  __tsu64 v1:7;
  int *v2;
  int *v3;
};
//SIG(1 BFu7ll_Ip_Ip) C1{ FL:7 Fp[2]}



static void Test_BFu7ll_Ip_Ip()
{
  {
    init_simple_test("BFu7ll_Ip_Ip");
    static STRUCT_IF_C BFu7ll_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Ip, BFu7ll_Ip_Ip)
//============================================================================


struct  BFu7ll_Ip_L  {
  __tsu64 v1:7;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Ip_L) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Ip_L()
{
  {
    init_simple_test("BFu7ll_Ip_L");
    static STRUCT_IF_C BFu7ll_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_L, BFu7ll_Ip_L)
//============================================================================


struct  BFu7ll_Ip_S  {
  __tsu64 v1:7;
  int *v2;
  short v3;
};
//SIG(1 BFu7ll_Ip_S) C1{ FL:7 Fp Fs}



static void Test_BFu7ll_Ip_S()
{
  {
    init_simple_test("BFu7ll_Ip_S");
    static STRUCT_IF_C BFu7ll_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_S, BFu7ll_Ip_S)
//============================================================================


struct  BFu7ll_Ip_Uc  {
  __tsu64 v1:7;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Ip_Uc) C1{ FL:7 Fp Fc}



static void Test_BFu7ll_Ip_Uc()
{
  {
    init_simple_test("BFu7ll_Ip_Uc");
    static STRUCT_IF_C BFu7ll_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Uc, BFu7ll_Ip_Uc)
//============================================================================


struct  BFu7ll_Ip_Ui  {
  __tsu64 v1:7;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Ip_Ui) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Ip_Ui()
{
  {
    init_simple_test("BFu7ll_Ip_Ui");
    static STRUCT_IF_C BFu7ll_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Ui, BFu7ll_Ip_Ui)
//============================================================================


struct  BFu7ll_Ip_Ul  {
  __tsu64 v1:7;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Ip_Ul) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Ip_Ul()
{
  {
    init_simple_test("BFu7ll_Ip_Ul");
    static STRUCT_IF_C BFu7ll_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Ul, BFu7ll_Ip_Ul)
//============================================================================


struct  BFu7ll_Ip_Us  {
  __tsu64 v1:7;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Ip_Us) C1{ FL:7 Fp Fs}



static void Test_BFu7ll_Ip_Us()
{
  {
    init_simple_test("BFu7ll_Ip_Us");
    static STRUCT_IF_C BFu7ll_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Us, BFu7ll_Ip_Us)
//============================================================================


struct  BFu7ll_Ip_Vp  {
  __tsu64 v1:7;
  int *v2;
  void *v3;
};
//SIG(1 BFu7ll_Ip_Vp) C1{ FL:7 Fp[2]}



static void Test_BFu7ll_Ip_Vp()
{
  {
    init_simple_test("BFu7ll_Ip_Vp");
    static STRUCT_IF_C BFu7ll_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ip_Vp, BFu7ll_Ip_Vp)
//============================================================================


struct  BFu7ll_L  {
  __tsu64 v1:7;
  __tsi64 v2;
};
//SIG(1 BFu7ll_L) C1{ FL:7 FL}



static void Test_BFu7ll_L()
{
  {
    init_simple_test("BFu7ll_L");
    static STRUCT_IF_C BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L, BFu7ll_L)
//============================================================================


struct  BFu7ll_L_BFu15i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_L_BFu15i) C1{ FL:7 FL Fi:15}



static void Test_BFu7ll_L_BFu15i()
{
  {
    init_simple_test("BFu7ll_L_BFu15i");
    static STRUCT_IF_C BFu7ll_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu15i, BFu7ll_L_BFu15i)
//============================================================================


struct  BFu7ll_L_BFu15ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_L_BFu15ll) C1{ FL:7 FL FL:15}



static void Test_BFu7ll_L_BFu15ll()
{
  {
    init_simple_test("BFu7ll_L_BFu15ll");
    static STRUCT_IF_C BFu7ll_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu15ll, BFu7ll_L_BFu15ll)
//============================================================================


struct  BFu7ll_L_BFu15s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_L_BFu15s) C1{ FL:7 FL Fs:15}



static void Test_BFu7ll_L_BFu15s()
{
  {
    init_simple_test("BFu7ll_L_BFu15s");
    static STRUCT_IF_C BFu7ll_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu15s, BFu7ll_L_BFu15s)
//============================================================================


struct  BFu7ll_L_BFu16i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_L_BFu16i) C1{ FL:7 FL Fi:16}



static void Test_BFu7ll_L_BFu16i()
{
  {
    init_simple_test("BFu7ll_L_BFu16i");
    static STRUCT_IF_C BFu7ll_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu16i, BFu7ll_L_BFu16i)
//============================================================================


struct  BFu7ll_L_BFu16ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_L_BFu16ll) C1{ FL:7 FL FL:16}



static void Test_BFu7ll_L_BFu16ll()
{
  {
    init_simple_test("BFu7ll_L_BFu16ll");
    static STRUCT_IF_C BFu7ll_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu16ll, BFu7ll_L_BFu16ll)
//============================================================================


struct  BFu7ll_L_BFu16s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_L_BFu16s) C1{ FL:7 FL Fs:16}



static void Test_BFu7ll_L_BFu16s()
{
  {
    init_simple_test("BFu7ll_L_BFu16s");
    static STRUCT_IF_C BFu7ll_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu16s, BFu7ll_L_BFu16s)
//============================================================================


struct  BFu7ll_L_BFu17i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_L_BFu17i) C1{ FL:7 FL Fi:17}



static void Test_BFu7ll_L_BFu17i()
{
  {
    init_simple_test("BFu7ll_L_BFu17i");
    static STRUCT_IF_C BFu7ll_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu17i, BFu7ll_L_BFu17i)
//============================================================================


struct  BFu7ll_L_BFu17ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_L_BFu17ll) C1{ FL:7 FL FL:17}



static void Test_BFu7ll_L_BFu17ll()
{
  {
    init_simple_test("BFu7ll_L_BFu17ll");
    static STRUCT_IF_C BFu7ll_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu17ll, BFu7ll_L_BFu17ll)
//============================================================================


struct  BFu7ll_L_BFu1c  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_L_BFu1c) C1{ FL:7 FL Fc:1}



static void Test_BFu7ll_L_BFu1c()
{
  {
    init_simple_test("BFu7ll_L_BFu1c");
    static STRUCT_IF_C BFu7ll_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu1c, BFu7ll_L_BFu1c)
//============================================================================


struct  BFu7ll_L_BFu1i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_L_BFu1i) C1{ FL:7 FL Fi:1}



static void Test_BFu7ll_L_BFu1i()
{
  {
    init_simple_test("BFu7ll_L_BFu1i");
    static STRUCT_IF_C BFu7ll_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu1i, BFu7ll_L_BFu1i)
//============================================================================


struct  BFu7ll_L_BFu1ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_L_BFu1ll) C1{ FL:7 FL FL:1}



static void Test_BFu7ll_L_BFu1ll()
{
  {
    init_simple_test("BFu7ll_L_BFu1ll");
    static STRUCT_IF_C BFu7ll_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu1ll, BFu7ll_L_BFu1ll)
//============================================================================


struct  BFu7ll_L_BFu1s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_L_BFu1s) C1{ FL:7 FL Fs:1}



static void Test_BFu7ll_L_BFu1s()
{
  {
    init_simple_test("BFu7ll_L_BFu1s");
    static STRUCT_IF_C BFu7ll_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu1s, BFu7ll_L_BFu1s)
//============================================================================


struct  BFu7ll_L_BFu31i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_L_BFu31i) C1{ FL:7 FL Fi:31}



static void Test_BFu7ll_L_BFu31i()
{
  {
    init_simple_test("BFu7ll_L_BFu31i");
    static STRUCT_IF_C BFu7ll_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu31i, BFu7ll_L_BFu31i)
//============================================================================


struct  BFu7ll_L_BFu31ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_L_BFu31ll) C1{ FL:7 FL FL:31}



static void Test_BFu7ll_L_BFu31ll()
{
  {
    init_simple_test("BFu7ll_L_BFu31ll");
    static STRUCT_IF_C BFu7ll_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu31ll, BFu7ll_L_BFu31ll)
//============================================================================


struct  BFu7ll_L_BFu32i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_L_BFu32i) C1{ FL:7 FL Fi:32}



static void Test_BFu7ll_L_BFu32i()
{
  {
    init_simple_test("BFu7ll_L_BFu32i");
    static STRUCT_IF_C BFu7ll_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu32i, BFu7ll_L_BFu32i)
//============================================================================


struct  BFu7ll_L_BFu32ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_L_BFu32ll) C1{ FL:7 FL FL:32}



static void Test_BFu7ll_L_BFu32ll()
{
  {
    init_simple_test("BFu7ll_L_BFu32ll");
    static STRUCT_IF_C BFu7ll_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu32ll, BFu7ll_L_BFu32ll)
//============================================================================


struct  BFu7ll_L_BFu33  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_L_BFu33) C1{ FL:7 FL FL:33}



static void Test_BFu7ll_L_BFu33()
{
  {
    init_simple_test("BFu7ll_L_BFu33");
    static STRUCT_IF_C BFu7ll_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7ll_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7ll_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu33, BFu7ll_L_BFu33)
//============================================================================


struct  BFu7ll_L_BFu7c  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_L_BFu7c) C1{ FL:7 FL Fc:7}



static void Test_BFu7ll_L_BFu7c()
{
  {
    init_simple_test("BFu7ll_L_BFu7c");
    static STRUCT_IF_C BFu7ll_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu7c, BFu7ll_L_BFu7c)
//============================================================================


struct  BFu7ll_L_BFu7i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_L_BFu7i) C1{ FL:7 FL Fi:7}



static void Test_BFu7ll_L_BFu7i()
{
  {
    init_simple_test("BFu7ll_L_BFu7i");
    static STRUCT_IF_C BFu7ll_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu7i, BFu7ll_L_BFu7i)
//============================================================================


struct  BFu7ll_L_BFu7ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_L_BFu7ll) C1{ FL:7 FL FL:7}



static void Test_BFu7ll_L_BFu7ll()
{
  {
    init_simple_test("BFu7ll_L_BFu7ll");
    static STRUCT_IF_C BFu7ll_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu7ll, BFu7ll_L_BFu7ll)
//============================================================================


struct  BFu7ll_L_BFu7s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_L_BFu7s) C1{ FL:7 FL Fs:7}



static void Test_BFu7ll_L_BFu7s()
{
  {
    init_simple_test("BFu7ll_L_BFu7s");
    static STRUCT_IF_C BFu7ll_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu7s, BFu7ll_L_BFu7s)
//============================================================================


struct  BFu7ll_L_BFu8c  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_L_BFu8c) C1{ FL:7 FL Fc:8}



static void Test_BFu7ll_L_BFu8c()
{
  {
    init_simple_test("BFu7ll_L_BFu8c");
    static STRUCT_IF_C BFu7ll_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu8c, BFu7ll_L_BFu8c)
//============================================================================


struct  BFu7ll_L_BFu8i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_L_BFu8i) C1{ FL:7 FL Fi:8}



static void Test_BFu7ll_L_BFu8i()
{
  {
    init_simple_test("BFu7ll_L_BFu8i");
    static STRUCT_IF_C BFu7ll_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu8i, BFu7ll_L_BFu8i)
//============================================================================


struct  BFu7ll_L_BFu8ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_L_BFu8ll) C1{ FL:7 FL FL:8}



static void Test_BFu7ll_L_BFu8ll()
{
  {
    init_simple_test("BFu7ll_L_BFu8ll");
    static STRUCT_IF_C BFu7ll_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu8ll, BFu7ll_L_BFu8ll)
//============================================================================


struct  BFu7ll_L_BFu8s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_L_BFu8s) C1{ FL:7 FL Fs:8}



static void Test_BFu7ll_L_BFu8s()
{
  {
    init_simple_test("BFu7ll_L_BFu8s");
    static STRUCT_IF_C BFu7ll_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu8s, BFu7ll_L_BFu8s)
//============================================================================


struct  BFu7ll_L_BFu9i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_L_BFu9i) C1{ FL:7 FL Fi:9}



static void Test_BFu7ll_L_BFu9i()
{
  {
    init_simple_test("BFu7ll_L_BFu9i");
    static STRUCT_IF_C BFu7ll_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu9i, BFu7ll_L_BFu9i)
//============================================================================


struct  BFu7ll_L_BFu9ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_L_BFu9ll) C1{ FL:7 FL FL:9}



static void Test_BFu7ll_L_BFu9ll()
{
  {
    init_simple_test("BFu7ll_L_BFu9ll");
    static STRUCT_IF_C BFu7ll_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu9ll, BFu7ll_L_BFu9ll)
//============================================================================


struct  BFu7ll_L_BFu9s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_L_BFu9s) C1{ FL:7 FL Fs:9}



static void Test_BFu7ll_L_BFu9s()
{
  {
    init_simple_test("BFu7ll_L_BFu9s");
    static STRUCT_IF_C BFu7ll_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_BFu9s, BFu7ll_L_BFu9s)
//============================================================================


struct  BFu7ll_L_C  {
  __tsu64 v1:7;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu7ll_L_C) C1{ FL:7 FL Fc}



static void Test_BFu7ll_L_C()
{
  {
    init_simple_test("BFu7ll_L_C");
    static STRUCT_IF_C BFu7ll_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_C, BFu7ll_L_C)
//============================================================================


struct  BFu7ll_L_D  {
  __tsu64 v1:7;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu7ll_L_D) C1{ FL:7 FL[2]}



static void Test_BFu7ll_L_D()
{
  {
    init_simple_test("BFu7ll_L_D");
    static STRUCT_IF_C BFu7ll_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_D, BFu7ll_L_D)
//============================================================================


struct  BFu7ll_L_F  {
  __tsu64 v1:7;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu7ll_L_F) C1{ FL:7 FL Fi}



static void Test_BFu7ll_L_F()
{
  {
    init_simple_test("BFu7ll_L_F");
    static STRUCT_IF_C BFu7ll_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_F, BFu7ll_L_F)
//============================================================================


struct  BFu7ll_L_I  {
  __tsu64 v1:7;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu7ll_L_I) C1{ FL:7 FL Fi}



static void Test_BFu7ll_L_I()
{
  {
    init_simple_test("BFu7ll_L_I");
    static STRUCT_IF_C BFu7ll_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_I, BFu7ll_L_I)
//============================================================================


struct  BFu7ll_L_Ip  {
  __tsu64 v1:7;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu7ll_L_Ip) C1{ FL:7 FL Fp}



static void Test_BFu7ll_L_Ip()
{
  {
    init_simple_test("BFu7ll_L_Ip");
    static STRUCT_IF_C BFu7ll_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Ip, BFu7ll_L_Ip)
//============================================================================


struct  BFu7ll_L_L  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_L_L) C1{ FL:7 FL[2]}



static void Test_BFu7ll_L_L()
{
  {
    init_simple_test("BFu7ll_L_L");
    static STRUCT_IF_C BFu7ll_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_L, BFu7ll_L_L)
//============================================================================


struct  BFu7ll_L_S  {
  __tsu64 v1:7;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu7ll_L_S) C1{ FL:7 FL Fs}



static void Test_BFu7ll_L_S()
{
  {
    init_simple_test("BFu7ll_L_S");
    static STRUCT_IF_C BFu7ll_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_S, BFu7ll_L_S)
//============================================================================


struct  BFu7ll_L_Uc  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_L_Uc) C1{ FL:7 FL Fc}



static void Test_BFu7ll_L_Uc()
{
  {
    init_simple_test("BFu7ll_L_Uc");
    static STRUCT_IF_C BFu7ll_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Uc, BFu7ll_L_Uc)
//============================================================================


struct  BFu7ll_L_Ui  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_L_Ui) C1{ FL:7 FL Fi}



static void Test_BFu7ll_L_Ui()
{
  {
    init_simple_test("BFu7ll_L_Ui");
    static STRUCT_IF_C BFu7ll_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Ui, BFu7ll_L_Ui)
//============================================================================


struct  BFu7ll_L_Ul  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_L_Ul) C1{ FL:7 FL[2]}



static void Test_BFu7ll_L_Ul()
{
  {
    init_simple_test("BFu7ll_L_Ul");
    static STRUCT_IF_C BFu7ll_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Ul, BFu7ll_L_Ul)
//============================================================================


struct  BFu7ll_L_Us  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_L_Us) C1{ FL:7 FL Fs}



static void Test_BFu7ll_L_Us()
{
  {
    init_simple_test("BFu7ll_L_Us");
    static STRUCT_IF_C BFu7ll_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Us, BFu7ll_L_Us)
//============================================================================


struct  BFu7ll_L_Vp  {
  __tsu64 v1:7;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu7ll_L_Vp) C1{ FL:7 FL Fp}



static void Test_BFu7ll_L_Vp()
{
  {
    init_simple_test("BFu7ll_L_Vp");
    static STRUCT_IF_C BFu7ll_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_L_Vp, BFu7ll_L_Vp)
//============================================================================


struct  BFu7ll_S  {
  __tsu64 v1:7;
  short v2;
};
//SIG(1 BFu7ll_S) C1{ FL:7 Fs}



static void Test_BFu7ll_S()
{
  {
    init_simple_test("BFu7ll_S");
    static STRUCT_IF_C BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S");
    check_field_offset(lv, v2, 2, "BFu7ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S, BFu7ll_S)
//============================================================================


struct  BFu7ll_S_BFu15i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_S_BFu15i) C1{ FL:7 Fs Fi:15}



static void Test_BFu7ll_S_BFu15i()
{
  {
    init_simple_test("BFu7ll_S_BFu15i");
    static STRUCT_IF_C BFu7ll_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu15i, BFu7ll_S_BFu15i)
//============================================================================


struct  BFu7ll_S_BFu15ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_S_BFu15ll) C1{ FL:7 Fs FL:15}



static void Test_BFu7ll_S_BFu15ll()
{
  {
    init_simple_test("BFu7ll_S_BFu15ll");
    static STRUCT_IF_C BFu7ll_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu15ll, BFu7ll_S_BFu15ll)
//============================================================================


struct  BFu7ll_S_BFu15s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_S_BFu15s) C1{ FL:7 Fs Fs:15}



static void Test_BFu7ll_S_BFu15s()
{
  {
    init_simple_test("BFu7ll_S_BFu15s");
    static STRUCT_IF_C BFu7ll_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu15s, BFu7ll_S_BFu15s)
//============================================================================


struct  BFu7ll_S_BFu16i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_S_BFu16i) C1{ FL:7 Fs Fi:16}



static void Test_BFu7ll_S_BFu16i()
{
  {
    init_simple_test("BFu7ll_S_BFu16i");
    static STRUCT_IF_C BFu7ll_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu16i, BFu7ll_S_BFu16i)
//============================================================================


struct  BFu7ll_S_BFu16ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_S_BFu16ll) C1{ FL:7 Fs FL:16}



static void Test_BFu7ll_S_BFu16ll()
{
  {
    init_simple_test("BFu7ll_S_BFu16ll");
    static STRUCT_IF_C BFu7ll_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu16ll, BFu7ll_S_BFu16ll)
//============================================================================


struct  BFu7ll_S_BFu16s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_S_BFu16s) C1{ FL:7 Fs Fs:16}



static void Test_BFu7ll_S_BFu16s()
{
  {
    init_simple_test("BFu7ll_S_BFu16s");
    static STRUCT_IF_C BFu7ll_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu16s, BFu7ll_S_BFu16s)
//============================================================================


struct  BFu7ll_S_BFu17i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_S_BFu17i) C1{ FL:7 Fs Fi:17}



static void Test_BFu7ll_S_BFu17i()
{
  {
    init_simple_test("BFu7ll_S_BFu17i");
    static STRUCT_IF_C BFu7ll_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu17i, BFu7ll_S_BFu17i)
//============================================================================


struct  BFu7ll_S_BFu17ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_S_BFu17ll) C1{ FL:7 Fs FL:17}



static void Test_BFu7ll_S_BFu17ll()
{
  {
    init_simple_test("BFu7ll_S_BFu17ll");
    static STRUCT_IF_C BFu7ll_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu17ll, BFu7ll_S_BFu17ll)
//============================================================================


struct  BFu7ll_S_BFu1c  {
  __tsu64 v1:7;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_S_BFu1c) C1{ FL:7 Fs Fc:1}



static void Test_BFu7ll_S_BFu1c()
{
  {
    init_simple_test("BFu7ll_S_BFu1c");
    static STRUCT_IF_C BFu7ll_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu1c, BFu7ll_S_BFu1c)
//============================================================================


struct  BFu7ll_S_BFu1i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_S_BFu1i) C1{ FL:7 Fs Fi:1}



static void Test_BFu7ll_S_BFu1i()
{
  {
    init_simple_test("BFu7ll_S_BFu1i");
    static STRUCT_IF_C BFu7ll_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu1i, BFu7ll_S_BFu1i)
//============================================================================


struct  BFu7ll_S_BFu1ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_S_BFu1ll) C1{ FL:7 Fs FL:1}



static void Test_BFu7ll_S_BFu1ll()
{
  {
    init_simple_test("BFu7ll_S_BFu1ll");
    static STRUCT_IF_C BFu7ll_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu1ll, BFu7ll_S_BFu1ll)
//============================================================================


struct  BFu7ll_S_BFu1s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_S_BFu1s) C1{ FL:7 Fs Fs:1}



static void Test_BFu7ll_S_BFu1s()
{
  {
    init_simple_test("BFu7ll_S_BFu1s");
    static STRUCT_IF_C BFu7ll_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu1s, BFu7ll_S_BFu1s)
//============================================================================


struct  BFu7ll_S_BFu31i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_S_BFu31i) C1{ FL:7 Fs Fi:31}



static void Test_BFu7ll_S_BFu31i()
{
  {
    init_simple_test("BFu7ll_S_BFu31i");
    static STRUCT_IF_C BFu7ll_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu31i, BFu7ll_S_BFu31i)
//============================================================================


struct  BFu7ll_S_BFu31ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_S_BFu31ll) C1{ FL:7 Fs FL:31}



static void Test_BFu7ll_S_BFu31ll()
{
  {
    init_simple_test("BFu7ll_S_BFu31ll");
    static STRUCT_IF_C BFu7ll_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu31ll, BFu7ll_S_BFu31ll)
//============================================================================


struct  BFu7ll_S_BFu32i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_S_BFu32i) C1{ FL:7 Fs Fi:32}



static void Test_BFu7ll_S_BFu32i()
{
  {
    init_simple_test("BFu7ll_S_BFu32i");
    static STRUCT_IF_C BFu7ll_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu32i, BFu7ll_S_BFu32i)
//============================================================================


struct  BFu7ll_S_BFu32ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_S_BFu32ll) C1{ FL:7 Fs FL:32}



static void Test_BFu7ll_S_BFu32ll()
{
  {
    init_simple_test("BFu7ll_S_BFu32ll");
    static STRUCT_IF_C BFu7ll_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu32ll, BFu7ll_S_BFu32ll)
//============================================================================


struct  BFu7ll_S_BFu33  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_S_BFu33) C1{ FL:7 Fs FL:33}



static void Test_BFu7ll_S_BFu33()
{
  {
    init_simple_test("BFu7ll_S_BFu33");
    static STRUCT_IF_C BFu7ll_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7ll_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7ll_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu33, BFu7ll_S_BFu33)
//============================================================================


struct  BFu7ll_S_BFu7c  {
  __tsu64 v1:7;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_S_BFu7c) C1{ FL:7 Fs Fc:7}



static void Test_BFu7ll_S_BFu7c()
{
  {
    init_simple_test("BFu7ll_S_BFu7c");
    static STRUCT_IF_C BFu7ll_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu7c, BFu7ll_S_BFu7c)
//============================================================================


struct  BFu7ll_S_BFu7i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_S_BFu7i) C1{ FL:7 Fs Fi:7}



static void Test_BFu7ll_S_BFu7i()
{
  {
    init_simple_test("BFu7ll_S_BFu7i");
    static STRUCT_IF_C BFu7ll_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu7i, BFu7ll_S_BFu7i)
//============================================================================


struct  BFu7ll_S_BFu7ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_S_BFu7ll) C1{ FL:7 Fs FL:7}



static void Test_BFu7ll_S_BFu7ll()
{
  {
    init_simple_test("BFu7ll_S_BFu7ll");
    static STRUCT_IF_C BFu7ll_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu7ll, BFu7ll_S_BFu7ll)
//============================================================================


struct  BFu7ll_S_BFu7s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_S_BFu7s) C1{ FL:7 Fs Fs:7}



static void Test_BFu7ll_S_BFu7s()
{
  {
    init_simple_test("BFu7ll_S_BFu7s");
    static STRUCT_IF_C BFu7ll_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu7s, BFu7ll_S_BFu7s)
//============================================================================


struct  BFu7ll_S_BFu8c  {
  __tsu64 v1:7;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_S_BFu8c) C1{ FL:7 Fs Fc:8}



static void Test_BFu7ll_S_BFu8c()
{
  {
    init_simple_test("BFu7ll_S_BFu8c");
    static STRUCT_IF_C BFu7ll_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu8c, BFu7ll_S_BFu8c)
//============================================================================


struct  BFu7ll_S_BFu8i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_S_BFu8i) C1{ FL:7 Fs Fi:8}



static void Test_BFu7ll_S_BFu8i()
{
  {
    init_simple_test("BFu7ll_S_BFu8i");
    static STRUCT_IF_C BFu7ll_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu8i, BFu7ll_S_BFu8i)
//============================================================================


struct  BFu7ll_S_BFu8ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_S_BFu8ll) C1{ FL:7 Fs FL:8}



static void Test_BFu7ll_S_BFu8ll()
{
  {
    init_simple_test("BFu7ll_S_BFu8ll");
    static STRUCT_IF_C BFu7ll_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu8ll, BFu7ll_S_BFu8ll)
//============================================================================


struct  BFu7ll_S_BFu8s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_S_BFu8s) C1{ FL:7 Fs Fs:8}



static void Test_BFu7ll_S_BFu8s()
{
  {
    init_simple_test("BFu7ll_S_BFu8s");
    static STRUCT_IF_C BFu7ll_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu8s, BFu7ll_S_BFu8s)
//============================================================================


struct  BFu7ll_S_BFu9i  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_S_BFu9i) C1{ FL:7 Fs Fi:9}



static void Test_BFu7ll_S_BFu9i()
{
  {
    init_simple_test("BFu7ll_S_BFu9i");
    static STRUCT_IF_C BFu7ll_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu9i, BFu7ll_S_BFu9i)
//============================================================================


struct  BFu7ll_S_BFu9ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_S_BFu9ll) C1{ FL:7 Fs FL:9}



static void Test_BFu7ll_S_BFu9ll()
{
  {
    init_simple_test("BFu7ll_S_BFu9ll");
    static STRUCT_IF_C BFu7ll_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu9ll, BFu7ll_S_BFu9ll)
//============================================================================


struct  BFu7ll_S_BFu9s  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_S_BFu9s) C1{ FL:7 Fs Fs:9}



static void Test_BFu7ll_S_BFu9s()
{
  {
    init_simple_test("BFu7ll_S_BFu9s");
    static STRUCT_IF_C BFu7ll_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_BFu9s, BFu7ll_S_BFu9s)
//============================================================================


struct  BFu7ll_S_C  {
  __tsu64 v1:7;
  short v2;
  char v3;
};
//SIG(1 BFu7ll_S_C) C1{ FL:7 Fs Fc}



static void Test_BFu7ll_S_C()
{
  {
    init_simple_test("BFu7ll_S_C");
    static STRUCT_IF_C BFu7ll_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_C");
    check_field_offset(lv, v2, 2, "BFu7ll_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_C, BFu7ll_S_C)
//============================================================================


struct  BFu7ll_S_D  {
  __tsu64 v1:7;
  short v2;
  double v3;
};
//SIG(1 BFu7ll_S_D) C1{ FL:7 Fs FL}



static void Test_BFu7ll_S_D()
{
  {
    init_simple_test("BFu7ll_S_D");
    static STRUCT_IF_C BFu7ll_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_D");
    check_field_offset(lv, v2, 2, "BFu7ll_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_D, BFu7ll_S_D)
//============================================================================


struct  BFu7ll_S_F  {
  __tsu64 v1:7;
  short v2;
  float v3;
};
//SIG(1 BFu7ll_S_F) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_S_F()
{
  {
    init_simple_test("BFu7ll_S_F");
    static STRUCT_IF_C BFu7ll_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_F");
    check_field_offset(lv, v2, 2, "BFu7ll_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_F, BFu7ll_S_F)
//============================================================================


struct  BFu7ll_S_I  {
  __tsu64 v1:7;
  short v2;
  int v3;
};
//SIG(1 BFu7ll_S_I) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_S_I()
{
  {
    init_simple_test("BFu7ll_S_I");
    static STRUCT_IF_C BFu7ll_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_I");
    check_field_offset(lv, v2, 2, "BFu7ll_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_I, BFu7ll_S_I)
//============================================================================


struct  BFu7ll_S_Ip  {
  __tsu64 v1:7;
  short v2;
  int *v3;
};
//SIG(1 BFu7ll_S_Ip) C1{ FL:7 Fs Fp}



static void Test_BFu7ll_S_Ip()
{
  {
    init_simple_test("BFu7ll_S_Ip");
    static STRUCT_IF_C BFu7ll_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Ip");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Ip, BFu7ll_S_Ip)
//============================================================================


struct  BFu7ll_S_L  {
  __tsu64 v1:7;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_S_L) C1{ FL:7 Fs FL}



static void Test_BFu7ll_S_L()
{
  {
    init_simple_test("BFu7ll_S_L");
    static STRUCT_IF_C BFu7ll_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_L");
    check_field_offset(lv, v2, 2, "BFu7ll_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_L, BFu7ll_S_L)
//============================================================================


struct  BFu7ll_S_S  {
  __tsu64 v1:7;
  short v2;
  short v3;
};
//SIG(1 BFu7ll_S_S) C1{ FL:7 Fs[2]}



static void Test_BFu7ll_S_S()
{
  {
    init_simple_test("BFu7ll_S_S");
    static STRUCT_IF_C BFu7ll_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_S");
    check_field_offset(lv, v2, 2, "BFu7ll_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_S, BFu7ll_S_S)
//============================================================================


struct  BFu7ll_S_Uc  {
  __tsu64 v1:7;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_S_Uc) C1{ FL:7 Fs Fc}



static void Test_BFu7ll_S_Uc()
{
  {
    init_simple_test("BFu7ll_S_Uc");
    static STRUCT_IF_C BFu7ll_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Uc");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Uc, BFu7ll_S_Uc)
//============================================================================


struct  BFu7ll_S_Ui  {
  __tsu64 v1:7;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_S_Ui) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_S_Ui()
{
  {
    init_simple_test("BFu7ll_S_Ui");
    static STRUCT_IF_C BFu7ll_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Ui");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Ui, BFu7ll_S_Ui)
//============================================================================


struct  BFu7ll_S_Ul  {
  __tsu64 v1:7;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_S_Ul) C1{ FL:7 Fs FL}



static void Test_BFu7ll_S_Ul()
{
  {
    init_simple_test("BFu7ll_S_Ul");
    static STRUCT_IF_C BFu7ll_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Ul");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Ul, BFu7ll_S_Ul)
//============================================================================


struct  BFu7ll_S_Us  {
  __tsu64 v1:7;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_S_Us) C1{ FL:7 Fs[2]}



static void Test_BFu7ll_S_Us()
{
  {
    init_simple_test("BFu7ll_S_Us");
    static STRUCT_IF_C BFu7ll_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_S_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Us");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Us, BFu7ll_S_Us)
//============================================================================


struct  BFu7ll_S_Vp  {
  __tsu64 v1:7;
  short v2;
  void *v3;
};
//SIG(1 BFu7ll_S_Vp) C1{ FL:7 Fs Fp}



static void Test_BFu7ll_S_Vp()
{
  {
    init_simple_test("BFu7ll_S_Vp");
    static STRUCT_IF_C BFu7ll_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_Vp");
    check_field_offset(lv, v2, 2, "BFu7ll_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_S_Vp, BFu7ll_S_Vp)
//============================================================================


struct  BFu7ll_Uc  {
  __tsu64 v1:7;
  unsigned char v2;
};
//SIG(1 BFu7ll_Uc) C1{ FL:7 Fc}



static void Test_BFu7ll_Uc()
{
  {
    init_simple_test("BFu7ll_Uc");
    static STRUCT_IF_C BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc, BFu7ll_Uc)
//============================================================================


struct  BFu7ll_Uc_BFu15i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Uc_BFu15i) C1{ FL:7 Fc Fi:15}



static void Test_BFu7ll_Uc_BFu15i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu15i");
    static STRUCT_IF_C BFu7ll_Uc_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu15i, BFu7ll_Uc_BFu15i)
//============================================================================


struct  BFu7ll_Uc_BFu15ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Uc_BFu15ll) C1{ FL:7 Fc FL:15}



static void Test_BFu7ll_Uc_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu15ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu15ll, BFu7ll_Uc_BFu15ll)
//============================================================================


struct  BFu7ll_Uc_BFu15s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Uc_BFu15s) C1{ FL:7 Fc Fs:15}



static void Test_BFu7ll_Uc_BFu15s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu15s");
    static STRUCT_IF_C BFu7ll_Uc_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu15s, BFu7ll_Uc_BFu15s)
//============================================================================


struct  BFu7ll_Uc_BFu16i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Uc_BFu16i) C1{ FL:7 Fc Fi:16}



static void Test_BFu7ll_Uc_BFu16i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu16i");
    static STRUCT_IF_C BFu7ll_Uc_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu16i, BFu7ll_Uc_BFu16i)
//============================================================================


struct  BFu7ll_Uc_BFu16ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Uc_BFu16ll) C1{ FL:7 Fc FL:16}



static void Test_BFu7ll_Uc_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu16ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu16ll, BFu7ll_Uc_BFu16ll)
//============================================================================


struct  BFu7ll_Uc_BFu16s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Uc_BFu16s) C1{ FL:7 Fc Fs:16}



static void Test_BFu7ll_Uc_BFu16s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu16s");
    static STRUCT_IF_C BFu7ll_Uc_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu16s, BFu7ll_Uc_BFu16s)
//============================================================================


struct  BFu7ll_Uc_BFu17i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Uc_BFu17i) C1{ FL:7 Fc Fi:17}



static void Test_BFu7ll_Uc_BFu17i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu17i");
    static STRUCT_IF_C BFu7ll_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu17i, BFu7ll_Uc_BFu17i)
//============================================================================


struct  BFu7ll_Uc_BFu17ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Uc_BFu17ll) C1{ FL:7 Fc FL:17}



static void Test_BFu7ll_Uc_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu17ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu17ll, BFu7ll_Uc_BFu17ll)
//============================================================================


struct  BFu7ll_Uc_BFu1c  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Uc_BFu1c) C1{ FL:7 Fc Fc:1}



static void Test_BFu7ll_Uc_BFu1c()
{
  {
    init_simple_test("BFu7ll_Uc_BFu1c");
    static STRUCT_IF_C BFu7ll_Uc_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu1c, BFu7ll_Uc_BFu1c)
//============================================================================


struct  BFu7ll_Uc_BFu1i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Uc_BFu1i) C1{ FL:7 Fc Fi:1}



static void Test_BFu7ll_Uc_BFu1i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu1i");
    static STRUCT_IF_C BFu7ll_Uc_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu1i, BFu7ll_Uc_BFu1i)
//============================================================================


struct  BFu7ll_Uc_BFu1ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Uc_BFu1ll) C1{ FL:7 Fc FL:1}



static void Test_BFu7ll_Uc_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu1ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu1ll, BFu7ll_Uc_BFu1ll)
//============================================================================


struct  BFu7ll_Uc_BFu1s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Uc_BFu1s) C1{ FL:7 Fc Fs:1}



static void Test_BFu7ll_Uc_BFu1s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu1s");
    static STRUCT_IF_C BFu7ll_Uc_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu1s, BFu7ll_Uc_BFu1s)
//============================================================================


struct  BFu7ll_Uc_BFu31i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Uc_BFu31i) C1{ FL:7 Fc Fi:31}



static void Test_BFu7ll_Uc_BFu31i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu31i");
    static STRUCT_IF_C BFu7ll_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu31i, BFu7ll_Uc_BFu31i)
//============================================================================


struct  BFu7ll_Uc_BFu31ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Uc_BFu31ll) C1{ FL:7 Fc FL:31}



static void Test_BFu7ll_Uc_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu31ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu31ll, BFu7ll_Uc_BFu31ll)
//============================================================================


struct  BFu7ll_Uc_BFu32i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Uc_BFu32i) C1{ FL:7 Fc Fi:32}



static void Test_BFu7ll_Uc_BFu32i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu32i");
    static STRUCT_IF_C BFu7ll_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu32i, BFu7ll_Uc_BFu32i)
//============================================================================


struct  BFu7ll_Uc_BFu32ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Uc_BFu32ll) C1{ FL:7 Fc FL:32}



static void Test_BFu7ll_Uc_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu32ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu32ll, BFu7ll_Uc_BFu32ll)
//============================================================================


struct  BFu7ll_Uc_BFu33  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Uc_BFu33) C1{ FL:7 Fc FL:33}



static void Test_BFu7ll_Uc_BFu33()
{
  {
    init_simple_test("BFu7ll_Uc_BFu33");
    static STRUCT_IF_C BFu7ll_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu33");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu33, BFu7ll_Uc_BFu33)
//============================================================================


struct  BFu7ll_Uc_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Uc_BFu7c) C1{ FL:7 Fc Fc:7}



static void Test_BFu7ll_Uc_BFu7c()
{
  {
    init_simple_test("BFu7ll_Uc_BFu7c");
    static STRUCT_IF_C BFu7ll_Uc_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu7c, BFu7ll_Uc_BFu7c)
//============================================================================


struct  BFu7ll_Uc_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Uc_BFu7i) C1{ FL:7 Fc Fi:7}



static void Test_BFu7ll_Uc_BFu7i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu7i");
    static STRUCT_IF_C BFu7ll_Uc_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu7i, BFu7ll_Uc_BFu7i)
//============================================================================


struct  BFu7ll_Uc_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Uc_BFu7ll) C1{ FL:7 Fc FL:7}



static void Test_BFu7ll_Uc_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu7ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu7ll, BFu7ll_Uc_BFu7ll)
//============================================================================


struct  BFu7ll_Uc_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Uc_BFu7s) C1{ FL:7 Fc Fs:7}



static void Test_BFu7ll_Uc_BFu7s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu7s");
    static STRUCT_IF_C BFu7ll_Uc_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu7s, BFu7ll_Uc_BFu7s)
//============================================================================


struct  BFu7ll_Uc_BFu8c  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Uc_BFu8c) C1{ FL:7 Fc Fc:8}



static void Test_BFu7ll_Uc_BFu8c()
{
  {
    init_simple_test("BFu7ll_Uc_BFu8c");
    static STRUCT_IF_C BFu7ll_Uc_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu8c, BFu7ll_Uc_BFu8c)
//============================================================================


struct  BFu7ll_Uc_BFu8i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Uc_BFu8i) C1{ FL:7 Fc Fi:8}



static void Test_BFu7ll_Uc_BFu8i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu8i");
    static STRUCT_IF_C BFu7ll_Uc_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu8i, BFu7ll_Uc_BFu8i)
//============================================================================


struct  BFu7ll_Uc_BFu8ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Uc_BFu8ll) C1{ FL:7 Fc FL:8}



static void Test_BFu7ll_Uc_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu8ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu8ll, BFu7ll_Uc_BFu8ll)
//============================================================================


struct  BFu7ll_Uc_BFu8s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Uc_BFu8s) C1{ FL:7 Fc Fs:8}



static void Test_BFu7ll_Uc_BFu8s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu8s");
    static STRUCT_IF_C BFu7ll_Uc_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu8s, BFu7ll_Uc_BFu8s)
//============================================================================


struct  BFu7ll_Uc_BFu9i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Uc_BFu9i) C1{ FL:7 Fc Fi:9}



static void Test_BFu7ll_Uc_BFu9i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu9i");
    static STRUCT_IF_C BFu7ll_Uc_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu9i, BFu7ll_Uc_BFu9i)
//============================================================================


struct  BFu7ll_Uc_BFu9ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Uc_BFu9ll) C1{ FL:7 Fc FL:9}



static void Test_BFu7ll_Uc_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu9ll");
    static STRUCT_IF_C BFu7ll_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu9ll, BFu7ll_Uc_BFu9ll)
//============================================================================


struct  BFu7ll_Uc_BFu9s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Uc_BFu9s) C1{ FL:7 Fc Fs:9}



static void Test_BFu7ll_Uc_BFu9s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu9s");
    static STRUCT_IF_C BFu7ll_Uc_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_BFu9s, BFu7ll_Uc_BFu9s)
//============================================================================


struct  BFu7ll_Uc_C  {
  __tsu64 v1:7;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu7ll_Uc_C) C1{ FL:7 Fc[2]}



static void Test_BFu7ll_Uc_C()
{
  {
    init_simple_test("BFu7ll_Uc_C");
    static STRUCT_IF_C BFu7ll_Uc_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_C");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_C.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_C, BFu7ll_Uc_C)
//============================================================================


struct  BFu7ll_Uc_D  {
  __tsu64 v1:7;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu7ll_Uc_D) C1{ FL:7 Fc FL}



static void Test_BFu7ll_Uc_D()
{
  {
    init_simple_test("BFu7ll_Uc_D");
    static STRUCT_IF_C BFu7ll_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_D");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_D, BFu7ll_Uc_D)
//============================================================================


struct  BFu7ll_Uc_F  {
  __tsu64 v1:7;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu7ll_Uc_F) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_Uc_F()
{
  {
    init_simple_test("BFu7ll_Uc_F");
    static STRUCT_IF_C BFu7ll_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_F");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_F, BFu7ll_Uc_F)
//============================================================================


struct  BFu7ll_Uc_I  {
  __tsu64 v1:7;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu7ll_Uc_I) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_Uc_I()
{
  {
    init_simple_test("BFu7ll_Uc_I");
    static STRUCT_IF_C BFu7ll_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_I");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_I, BFu7ll_Uc_I)
//============================================================================


struct  BFu7ll_Uc_Ip  {
  __tsu64 v1:7;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu7ll_Uc_Ip) C1{ FL:7 Fc Fp}



static void Test_BFu7ll_Uc_Ip()
{
  {
    init_simple_test("BFu7ll_Uc_Ip");
    static STRUCT_IF_C BFu7ll_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Ip");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Ip, BFu7ll_Uc_Ip)
//============================================================================


struct  BFu7ll_Uc_L  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Uc_L) C1{ FL:7 Fc FL}



static void Test_BFu7ll_Uc_L()
{
  {
    init_simple_test("BFu7ll_Uc_L");
    static STRUCT_IF_C BFu7ll_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_L");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_L, BFu7ll_Uc_L)
//============================================================================


struct  BFu7ll_Uc_S  {
  __tsu64 v1:7;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu7ll_Uc_S) C1{ FL:7 Fc Fs}



static void Test_BFu7ll_Uc_S()
{
  {
    init_simple_test("BFu7ll_Uc_S");
    static STRUCT_IF_C BFu7ll_Uc_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_S");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_S.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_S, BFu7ll_Uc_S)
//============================================================================


struct  BFu7ll_Uc_Uc  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Uc_Uc) C1{ FL:7 Fc[2]}



static void Test_BFu7ll_Uc_Uc()
{
  {
    init_simple_test("BFu7ll_Uc_Uc");
    static STRUCT_IF_C BFu7ll_Uc_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Uc");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Uc, BFu7ll_Uc_Uc)
//============================================================================


struct  BFu7ll_Uc_Ui  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Uc_Ui) C1{ FL:7 Fc Fi}



static void Test_BFu7ll_Uc_Ui()
{
  {
    init_simple_test("BFu7ll_Uc_Ui");
    static STRUCT_IF_C BFu7ll_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Uc_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Ui");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Ui, BFu7ll_Uc_Ui)
//============================================================================


struct  BFu7ll_Uc_Ul  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Uc_Ul) C1{ FL:7 Fc FL}



static void Test_BFu7ll_Uc_Ul()
{
  {
    init_simple_test("BFu7ll_Uc_Ul");
    static STRUCT_IF_C BFu7ll_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Ul");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Ul, BFu7ll_Uc_Ul)
//============================================================================


struct  BFu7ll_Uc_Us  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Uc_Us) C1{ FL:7 Fc Fs}



static void Test_BFu7ll_Uc_Us()
{
  {
    init_simple_test("BFu7ll_Uc_Us");
    static STRUCT_IF_C BFu7ll_Uc_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Us");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7ll_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Us, BFu7ll_Uc_Us)
//============================================================================


struct  BFu7ll_Uc_Vp  {
  __tsu64 v1:7;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu7ll_Uc_Vp) C1{ FL:7 Fc Fp}



static void Test_BFu7ll_Uc_Vp()
{
  {
    init_simple_test("BFu7ll_Uc_Vp");
    static STRUCT_IF_C BFu7ll_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_Vp");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Uc_Vp, BFu7ll_Uc_Vp)
//============================================================================


struct  BFu7ll_Ui  {
  __tsu64 v1:7;
  unsigned int v2;
};
//SIG(1 BFu7ll_Ui) C1{ FL:7 Fi}



static void Test_BFu7ll_Ui()
{
  {
    init_simple_test("BFu7ll_Ui");
    static STRUCT_IF_C BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui, BFu7ll_Ui)
//============================================================================


struct  BFu7ll_Ui_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Ui_BFu15i) C1{ FL:7 Fi Fi:15}



static void Test_BFu7ll_Ui_BFu15i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu15i");
    static STRUCT_IF_C BFu7ll_Ui_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu15i, BFu7ll_Ui_BFu15i)
//============================================================================


struct  BFu7ll_Ui_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Ui_BFu15ll) C1{ FL:7 Fi FL:15}



static void Test_BFu7ll_Ui_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu15ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu15ll, BFu7ll_Ui_BFu15ll)
//============================================================================


struct  BFu7ll_Ui_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Ui_BFu15s) C1{ FL:7 Fi Fs:15}



static void Test_BFu7ll_Ui_BFu15s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu15s");
    static STRUCT_IF_C BFu7ll_Ui_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu15s, BFu7ll_Ui_BFu15s)
//============================================================================


struct  BFu7ll_Ui_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Ui_BFu16i) C1{ FL:7 Fi Fi:16}



static void Test_BFu7ll_Ui_BFu16i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu16i");
    static STRUCT_IF_C BFu7ll_Ui_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu16i, BFu7ll_Ui_BFu16i)
//============================================================================


struct  BFu7ll_Ui_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Ui_BFu16ll) C1{ FL:7 Fi FL:16}



static void Test_BFu7ll_Ui_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu16ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu16ll, BFu7ll_Ui_BFu16ll)
//============================================================================


struct  BFu7ll_Ui_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Ui_BFu16s) C1{ FL:7 Fi Fs:16}



static void Test_BFu7ll_Ui_BFu16s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu16s");
    static STRUCT_IF_C BFu7ll_Ui_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu16s, BFu7ll_Ui_BFu16s)
//============================================================================


struct  BFu7ll_Ui_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Ui_BFu17i) C1{ FL:7 Fi Fi:17}



static void Test_BFu7ll_Ui_BFu17i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu17i");
    static STRUCT_IF_C BFu7ll_Ui_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu17i, BFu7ll_Ui_BFu17i)
//============================================================================


struct  BFu7ll_Ui_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Ui_BFu17ll) C1{ FL:7 Fi FL:17}



static void Test_BFu7ll_Ui_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu17ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu17ll, BFu7ll_Ui_BFu17ll)
//============================================================================


struct  BFu7ll_Ui_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Ui_BFu1c) C1{ FL:7 Fi Fc:1}



static void Test_BFu7ll_Ui_BFu1c()
{
  {
    init_simple_test("BFu7ll_Ui_BFu1c");
    static STRUCT_IF_C BFu7ll_Ui_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu1c, BFu7ll_Ui_BFu1c)
//============================================================================


struct  BFu7ll_Ui_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Ui_BFu1i) C1{ FL:7 Fi Fi:1}



static void Test_BFu7ll_Ui_BFu1i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu1i");
    static STRUCT_IF_C BFu7ll_Ui_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu1i, BFu7ll_Ui_BFu1i)
//============================================================================


struct  BFu7ll_Ui_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Ui_BFu1ll) C1{ FL:7 Fi FL:1}



static void Test_BFu7ll_Ui_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu1ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu1ll, BFu7ll_Ui_BFu1ll)
//============================================================================


struct  BFu7ll_Ui_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Ui_BFu1s) C1{ FL:7 Fi Fs:1}



static void Test_BFu7ll_Ui_BFu1s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu1s");
    static STRUCT_IF_C BFu7ll_Ui_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu1s, BFu7ll_Ui_BFu1s)
//============================================================================


struct  BFu7ll_Ui_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Ui_BFu31i) C1{ FL:7 Fi Fi:31}



static void Test_BFu7ll_Ui_BFu31i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu31i");
    static STRUCT_IF_C BFu7ll_Ui_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu31i, BFu7ll_Ui_BFu31i)
//============================================================================


struct  BFu7ll_Ui_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Ui_BFu31ll) C1{ FL:7 Fi FL:31}



static void Test_BFu7ll_Ui_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu31ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu31ll, BFu7ll_Ui_BFu31ll)
//============================================================================


struct  BFu7ll_Ui_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Ui_BFu32i) C1{ FL:7 Fi Fi:32}



static void Test_BFu7ll_Ui_BFu32i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu32i");
    static STRUCT_IF_C BFu7ll_Ui_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu32i, BFu7ll_Ui_BFu32i)
//============================================================================


struct  BFu7ll_Ui_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Ui_BFu32ll) C1{ FL:7 Fi FL:32}



static void Test_BFu7ll_Ui_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu32ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu32ll, BFu7ll_Ui_BFu32ll)
//============================================================================


struct  BFu7ll_Ui_BFu33  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Ui_BFu33) C1{ FL:7 Fi FL:33}



static void Test_BFu7ll_Ui_BFu33()
{
  {
    init_simple_test("BFu7ll_Ui_BFu33");
    static STRUCT_IF_C BFu7ll_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7ll_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7ll_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu33, BFu7ll_Ui_BFu33)
//============================================================================


struct  BFu7ll_Ui_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Ui_BFu7c) C1{ FL:7 Fi Fc:7}



static void Test_BFu7ll_Ui_BFu7c()
{
  {
    init_simple_test("BFu7ll_Ui_BFu7c");
    static STRUCT_IF_C BFu7ll_Ui_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu7c, BFu7ll_Ui_BFu7c)
//============================================================================


struct  BFu7ll_Ui_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Ui_BFu7i) C1{ FL:7 Fi Fi:7}



static void Test_BFu7ll_Ui_BFu7i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu7i");
    static STRUCT_IF_C BFu7ll_Ui_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu7i, BFu7ll_Ui_BFu7i)
//============================================================================


struct  BFu7ll_Ui_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Ui_BFu7ll) C1{ FL:7 Fi FL:7}



static void Test_BFu7ll_Ui_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu7ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu7ll, BFu7ll_Ui_BFu7ll)
//============================================================================


struct  BFu7ll_Ui_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Ui_BFu7s) C1{ FL:7 Fi Fs:7}



static void Test_BFu7ll_Ui_BFu7s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu7s");
    static STRUCT_IF_C BFu7ll_Ui_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu7s, BFu7ll_Ui_BFu7s)
//============================================================================


struct  BFu7ll_Ui_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Ui_BFu8c) C1{ FL:7 Fi Fc:8}



static void Test_BFu7ll_Ui_BFu8c()
{
  {
    init_simple_test("BFu7ll_Ui_BFu8c");
    static STRUCT_IF_C BFu7ll_Ui_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu8c, BFu7ll_Ui_BFu8c)
//============================================================================


struct  BFu7ll_Ui_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Ui_BFu8i) C1{ FL:7 Fi Fi:8}



static void Test_BFu7ll_Ui_BFu8i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu8i");
    static STRUCT_IF_C BFu7ll_Ui_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu8i, BFu7ll_Ui_BFu8i)
//============================================================================


struct  BFu7ll_Ui_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Ui_BFu8ll) C1{ FL:7 Fi FL:8}



static void Test_BFu7ll_Ui_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu8ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu8ll, BFu7ll_Ui_BFu8ll)
//============================================================================


struct  BFu7ll_Ui_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Ui_BFu8s) C1{ FL:7 Fi Fs:8}



static void Test_BFu7ll_Ui_BFu8s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu8s");
    static STRUCT_IF_C BFu7ll_Ui_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu8s, BFu7ll_Ui_BFu8s)
//============================================================================


struct  BFu7ll_Ui_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Ui_BFu9i) C1{ FL:7 Fi Fi:9}



static void Test_BFu7ll_Ui_BFu9i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu9i");
    static STRUCT_IF_C BFu7ll_Ui_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu9i, BFu7ll_Ui_BFu9i)
//============================================================================


struct  BFu7ll_Ui_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Ui_BFu9ll) C1{ FL:7 Fi FL:9}



static void Test_BFu7ll_Ui_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu9ll");
    static STRUCT_IF_C BFu7ll_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu9ll, BFu7ll_Ui_BFu9ll)
//============================================================================


struct  BFu7ll_Ui_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Ui_BFu9s) C1{ FL:7 Fi Fs:9}



static void Test_BFu7ll_Ui_BFu9s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu9s");
    static STRUCT_IF_C BFu7ll_Ui_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_BFu9s, BFu7ll_Ui_BFu9s)
//============================================================================


struct  BFu7ll_Ui_C  {
  __tsu64 v1:7;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu7ll_Ui_C) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_Ui_C()
{
  {
    init_simple_test("BFu7ll_Ui_C");
    static STRUCT_IF_C BFu7ll_Ui_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_C");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_C, BFu7ll_Ui_C)
//============================================================================


struct  BFu7ll_Ui_D  {
  __tsu64 v1:7;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu7ll_Ui_D) C1{ FL:7 Fi FL}



static void Test_BFu7ll_Ui_D()
{
  {
    init_simple_test("BFu7ll_Ui_D");
    static STRUCT_IF_C BFu7ll_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_D");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_D, BFu7ll_Ui_D)
//============================================================================


struct  BFu7ll_Ui_F  {
  __tsu64 v1:7;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu7ll_Ui_F) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_Ui_F()
{
  {
    init_simple_test("BFu7ll_Ui_F");
    static STRUCT_IF_C BFu7ll_Ui_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_F");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_F, BFu7ll_Ui_F)
//============================================================================


struct  BFu7ll_Ui_I  {
  __tsu64 v1:7;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu7ll_Ui_I) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_Ui_I()
{
  {
    init_simple_test("BFu7ll_Ui_I");
    static STRUCT_IF_C BFu7ll_Ui_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_I");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_I, BFu7ll_Ui_I)
//============================================================================


struct  BFu7ll_Ui_Ip  {
  __tsu64 v1:7;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu7ll_Ui_Ip) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_Ui_Ip()
{
  {
    init_simple_test("BFu7ll_Ui_Ip");
    static STRUCT_IF_C BFu7ll_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Ip, BFu7ll_Ui_Ip)
//============================================================================


struct  BFu7ll_Ui_L  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Ui_L) C1{ FL:7 Fi FL}



static void Test_BFu7ll_Ui_L()
{
  {
    init_simple_test("BFu7ll_Ui_L");
    static STRUCT_IF_C BFu7ll_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_L");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_L, BFu7ll_Ui_L)
//============================================================================


struct  BFu7ll_Ui_S  {
  __tsu64 v1:7;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu7ll_Ui_S) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_Ui_S()
{
  {
    init_simple_test("BFu7ll_Ui_S");
    static STRUCT_IF_C BFu7ll_Ui_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_S");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_S, BFu7ll_Ui_S)
//============================================================================


struct  BFu7ll_Ui_Uc  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Ui_Uc) C1{ FL:7 Fi Fc}



static void Test_BFu7ll_Ui_Uc()
{
  {
    init_simple_test("BFu7ll_Ui_Uc");
    static STRUCT_IF_C BFu7ll_Ui_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Uc, BFu7ll_Ui_Uc)
//============================================================================


struct  BFu7ll_Ui_Ui  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Ui_Ui) C1{ FL:7 Fi[2]}



static void Test_BFu7ll_Ui_Ui()
{
  {
    init_simple_test("BFu7ll_Ui_Ui");
    static STRUCT_IF_C BFu7ll_Ui_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Ui, BFu7ll_Ui_Ui)
//============================================================================


struct  BFu7ll_Ui_Ul  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Ui_Ul) C1{ FL:7 Fi FL}



static void Test_BFu7ll_Ui_Ul()
{
  {
    init_simple_test("BFu7ll_Ui_Ul");
    static STRUCT_IF_C BFu7ll_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Ul, BFu7ll_Ui_Ul)
//============================================================================


struct  BFu7ll_Ui_Us  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Ui_Us) C1{ FL:7 Fi Fs}



static void Test_BFu7ll_Ui_Us()
{
  {
    init_simple_test("BFu7ll_Ui_Us");
    static STRUCT_IF_C BFu7ll_Ui_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Us, BFu7ll_Ui_Us)
//============================================================================


struct  BFu7ll_Ui_Vp  {
  __tsu64 v1:7;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu7ll_Ui_Vp) C1{ FL:7 Fi Fp}



static void Test_BFu7ll_Ui_Vp()
{
  {
    init_simple_test("BFu7ll_Ui_Vp");
    static STRUCT_IF_C BFu7ll_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7ll_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ui_Vp, BFu7ll_Ui_Vp)
//============================================================================


struct  BFu7ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2;
};
//SIG(1 BFu7ll_Ul) C1{ FL:7 FL}



static void Test_BFu7ll_Ul()
{
  {
    init_simple_test("BFu7ll_Ul");
    static STRUCT_IF_C BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul, BFu7ll_Ul)
//============================================================================


struct  BFu7ll_Ul_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Ul_BFu15i) C1{ FL:7 FL Fi:15}



static void Test_BFu7ll_Ul_BFu15i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu15i");
    static STRUCT_IF_C BFu7ll_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu15i, BFu7ll_Ul_BFu15i)
//============================================================================


struct  BFu7ll_Ul_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Ul_BFu15ll) C1{ FL:7 FL FL:15}



static void Test_BFu7ll_Ul_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu15ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu15ll, BFu7ll_Ul_BFu15ll)
//============================================================================


struct  BFu7ll_Ul_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Ul_BFu15s) C1{ FL:7 FL Fs:15}



static void Test_BFu7ll_Ul_BFu15s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu15s");
    static STRUCT_IF_C BFu7ll_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7ll_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7ll_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu15s, BFu7ll_Ul_BFu15s)
//============================================================================


struct  BFu7ll_Ul_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Ul_BFu16i) C1{ FL:7 FL Fi:16}



static void Test_BFu7ll_Ul_BFu16i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu16i");
    static STRUCT_IF_C BFu7ll_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu16i, BFu7ll_Ul_BFu16i)
//============================================================================


struct  BFu7ll_Ul_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Ul_BFu16ll) C1{ FL:7 FL FL:16}



static void Test_BFu7ll_Ul_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu16ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu16ll, BFu7ll_Ul_BFu16ll)
//============================================================================


struct  BFu7ll_Ul_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Ul_BFu16s) C1{ FL:7 FL Fs:16}



static void Test_BFu7ll_Ul_BFu16s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu16s");
    static STRUCT_IF_C BFu7ll_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7ll_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7ll_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu16s, BFu7ll_Ul_BFu16s)
//============================================================================


struct  BFu7ll_Ul_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Ul_BFu17i) C1{ FL:7 FL Fi:17}



static void Test_BFu7ll_Ul_BFu17i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu17i");
    static STRUCT_IF_C BFu7ll_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu17i, BFu7ll_Ul_BFu17i)
//============================================================================


struct  BFu7ll_Ul_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Ul_BFu17ll) C1{ FL:7 FL FL:17}



static void Test_BFu7ll_Ul_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu17ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7ll_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7ll_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu17ll, BFu7ll_Ul_BFu17ll)
//============================================================================


struct  BFu7ll_Ul_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Ul_BFu1c) C1{ FL:7 FL Fc:1}



static void Test_BFu7ll_Ul_BFu1c()
{
  {
    init_simple_test("BFu7ll_Ul_BFu1c");
    static STRUCT_IF_C BFu7ll_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu1c, BFu7ll_Ul_BFu1c)
//============================================================================


struct  BFu7ll_Ul_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Ul_BFu1i) C1{ FL:7 FL Fi:1}



static void Test_BFu7ll_Ul_BFu1i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu1i");
    static STRUCT_IF_C BFu7ll_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu1i, BFu7ll_Ul_BFu1i)
//============================================================================


struct  BFu7ll_Ul_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Ul_BFu1ll) C1{ FL:7 FL FL:1}



static void Test_BFu7ll_Ul_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu1ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu1ll, BFu7ll_Ul_BFu1ll)
//============================================================================


struct  BFu7ll_Ul_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Ul_BFu1s) C1{ FL:7 FL Fs:1}



static void Test_BFu7ll_Ul_BFu1s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu1s");
    static STRUCT_IF_C BFu7ll_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7ll_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu1s, BFu7ll_Ul_BFu1s)
//============================================================================


struct  BFu7ll_Ul_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Ul_BFu31i) C1{ FL:7 FL Fi:31}



static void Test_BFu7ll_Ul_BFu31i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu31i");
    static STRUCT_IF_C BFu7ll_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu31i, BFu7ll_Ul_BFu31i)
//============================================================================


struct  BFu7ll_Ul_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Ul_BFu31ll) C1{ FL:7 FL FL:31}



static void Test_BFu7ll_Ul_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu31ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7ll_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7ll_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu31ll, BFu7ll_Ul_BFu31ll)
//============================================================================


struct  BFu7ll_Ul_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Ul_BFu32i) C1{ FL:7 FL Fi:32}



static void Test_BFu7ll_Ul_BFu32i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu32i");
    static STRUCT_IF_C BFu7ll_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu32i, BFu7ll_Ul_BFu32i)
//============================================================================


struct  BFu7ll_Ul_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Ul_BFu32ll) C1{ FL:7 FL FL:32}



static void Test_BFu7ll_Ul_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu32ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7ll_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7ll_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu32ll, BFu7ll_Ul_BFu32ll)
//============================================================================


struct  BFu7ll_Ul_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Ul_BFu33) C1{ FL:7 FL FL:33}



static void Test_BFu7ll_Ul_BFu33()
{
  {
    init_simple_test("BFu7ll_Ul_BFu33");
    static STRUCT_IF_C BFu7ll_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7ll_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7ll_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu33, BFu7ll_Ul_BFu33)
//============================================================================


struct  BFu7ll_Ul_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Ul_BFu7c) C1{ FL:7 FL Fc:7}



static void Test_BFu7ll_Ul_BFu7c()
{
  {
    init_simple_test("BFu7ll_Ul_BFu7c");
    static STRUCT_IF_C BFu7ll_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu7c, BFu7ll_Ul_BFu7c)
//============================================================================


struct  BFu7ll_Ul_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Ul_BFu7i) C1{ FL:7 FL Fi:7}



static void Test_BFu7ll_Ul_BFu7i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu7i");
    static STRUCT_IF_C BFu7ll_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu7i, BFu7ll_Ul_BFu7i)
//============================================================================


struct  BFu7ll_Ul_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Ul_BFu7ll) C1{ FL:7 FL FL:7}



static void Test_BFu7ll_Ul_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu7ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu7ll, BFu7ll_Ul_BFu7ll)
//============================================================================


struct  BFu7ll_Ul_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Ul_BFu7s) C1{ FL:7 FL Fs:7}



static void Test_BFu7ll_Ul_BFu7s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu7s");
    static STRUCT_IF_C BFu7ll_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7ll_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu7s, BFu7ll_Ul_BFu7s)
//============================================================================


struct  BFu7ll_Ul_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Ul_BFu8c) C1{ FL:7 FL Fc:8}



static void Test_BFu7ll_Ul_BFu8c()
{
  {
    init_simple_test("BFu7ll_Ul_BFu8c");
    static STRUCT_IF_C BFu7ll_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu8c, BFu7ll_Ul_BFu8c)
//============================================================================


struct  BFu7ll_Ul_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Ul_BFu8i) C1{ FL:7 FL Fi:8}



static void Test_BFu7ll_Ul_BFu8i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu8i");
    static STRUCT_IF_C BFu7ll_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu8i, BFu7ll_Ul_BFu8i)
//============================================================================


struct  BFu7ll_Ul_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Ul_BFu8ll) C1{ FL:7 FL FL:8}



static void Test_BFu7ll_Ul_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu8ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu8ll, BFu7ll_Ul_BFu8ll)
//============================================================================


struct  BFu7ll_Ul_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Ul_BFu8s) C1{ FL:7 FL Fs:8}



static void Test_BFu7ll_Ul_BFu8s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu8s");
    static STRUCT_IF_C BFu7ll_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7ll_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7ll_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu8s, BFu7ll_Ul_BFu8s)
//============================================================================


struct  BFu7ll_Ul_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Ul_BFu9i) C1{ FL:7 FL Fi:9}



static void Test_BFu7ll_Ul_BFu9i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu9i");
    static STRUCT_IF_C BFu7ll_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu9i, BFu7ll_Ul_BFu9i)
//============================================================================


struct  BFu7ll_Ul_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Ul_BFu9ll) C1{ FL:7 FL FL:9}



static void Test_BFu7ll_Ul_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu9ll");
    static STRUCT_IF_C BFu7ll_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu9ll, BFu7ll_Ul_BFu9ll)
//============================================================================


struct  BFu7ll_Ul_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Ul_BFu9s) C1{ FL:7 FL Fs:9}



static void Test_BFu7ll_Ul_BFu9s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu9s");
    static STRUCT_IF_C BFu7ll_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7ll_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7ll_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_BFu9s, BFu7ll_Ul_BFu9s)
//============================================================================


struct  BFu7ll_Ul_C  {
  __tsu64 v1:7;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu7ll_Ul_C) C1{ FL:7 FL Fc}



static void Test_BFu7ll_Ul_C()
{
  {
    init_simple_test("BFu7ll_Ul_C");
    static STRUCT_IF_C BFu7ll_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_C, BFu7ll_Ul_C)
//============================================================================


struct  BFu7ll_Ul_D  {
  __tsu64 v1:7;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu7ll_Ul_D) C1{ FL:7 FL[2]}



static void Test_BFu7ll_Ul_D()
{
  {
    init_simple_test("BFu7ll_Ul_D");
    static STRUCT_IF_C BFu7ll_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_D, BFu7ll_Ul_D)
//============================================================================


struct  BFu7ll_Ul_F  {
  __tsu64 v1:7;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu7ll_Ul_F) C1{ FL:7 FL Fi}



static void Test_BFu7ll_Ul_F()
{
  {
    init_simple_test("BFu7ll_Ul_F");
    static STRUCT_IF_C BFu7ll_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_F, BFu7ll_Ul_F)
//============================================================================


struct  BFu7ll_Ul_I  {
  __tsu64 v1:7;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu7ll_Ul_I) C1{ FL:7 FL Fi}



static void Test_BFu7ll_Ul_I()
{
  {
    init_simple_test("BFu7ll_Ul_I");
    static STRUCT_IF_C BFu7ll_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_I, BFu7ll_Ul_I)
//============================================================================


struct  BFu7ll_Ul_Ip  {
  __tsu64 v1:7;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu7ll_Ul_Ip) C1{ FL:7 FL Fp}



static void Test_BFu7ll_Ul_Ip()
{
  {
    init_simple_test("BFu7ll_Ul_Ip");
    static STRUCT_IF_C BFu7ll_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Ip, BFu7ll_Ul_Ip)
//============================================================================


struct  BFu7ll_Ul_L  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Ul_L) C1{ FL:7 FL[2]}



static void Test_BFu7ll_Ul_L()
{
  {
    init_simple_test("BFu7ll_Ul_L");
    static STRUCT_IF_C BFu7ll_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_L, BFu7ll_Ul_L)
//============================================================================


struct  BFu7ll_Ul_S  {
  __tsu64 v1:7;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu7ll_Ul_S) C1{ FL:7 FL Fs}



static void Test_BFu7ll_Ul_S()
{
  {
    init_simple_test("BFu7ll_Ul_S");
    static STRUCT_IF_C BFu7ll_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_S, BFu7ll_Ul_S)
//============================================================================


struct  BFu7ll_Ul_Uc  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Ul_Uc) C1{ FL:7 FL Fc}



static void Test_BFu7ll_Ul_Uc()
{
  {
    init_simple_test("BFu7ll_Ul_Uc");
    static STRUCT_IF_C BFu7ll_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Uc, BFu7ll_Ul_Uc)
//============================================================================


struct  BFu7ll_Ul_Ui  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Ul_Ui) C1{ FL:7 FL Fi}



static void Test_BFu7ll_Ul_Ui()
{
  {
    init_simple_test("BFu7ll_Ul_Ui");
    static STRUCT_IF_C BFu7ll_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Ui, BFu7ll_Ul_Ui)
//============================================================================


struct  BFu7ll_Ul_Ul  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Ul_Ul) C1{ FL:7 FL[2]}



static void Test_BFu7ll_Ul_Ul()
{
  {
    init_simple_test("BFu7ll_Ul_Ul");
    static STRUCT_IF_C BFu7ll_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7ll_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Ul, BFu7ll_Ul_Ul)
//============================================================================


struct  BFu7ll_Ul_Us  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Ul_Us) C1{ FL:7 FL Fs}



static void Test_BFu7ll_Ul_Us()
{
  {
    init_simple_test("BFu7ll_Ul_Us");
    static STRUCT_IF_C BFu7ll_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Us, BFu7ll_Ul_Us)
//============================================================================


struct  BFu7ll_Ul_Vp  {
  __tsu64 v1:7;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu7ll_Ul_Vp) C1{ FL:7 FL Fp}



static void Test_BFu7ll_Ul_Vp()
{
  {
    init_simple_test("BFu7ll_Ul_Vp");
    static STRUCT_IF_C BFu7ll_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7ll_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Ul_Vp, BFu7ll_Ul_Vp)
//============================================================================


struct  BFu7ll_Us  {
  __tsu64 v1:7;
  unsigned short v2;
};
//SIG(1 BFu7ll_Us) C1{ FL:7 Fs}



static void Test_BFu7ll_Us()
{
  {
    init_simple_test("BFu7ll_Us");
    static STRUCT_IF_C BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us");
    check_field_offset(lv, v2, 2, "BFu7ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us, BFu7ll_Us)
//============================================================================


struct  BFu7ll_Us_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Us_BFu15i) C1{ FL:7 Fs Fi:15}



static void Test_BFu7ll_Us_BFu15i()
{
  {
    init_simple_test("BFu7ll_Us_BFu15i");
    static STRUCT_IF_C BFu7ll_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu15i, BFu7ll_Us_BFu15i)
//============================================================================


struct  BFu7ll_Us_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Us_BFu15ll) C1{ FL:7 Fs FL:15}



static void Test_BFu7ll_Us_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu15ll");
    static STRUCT_IF_C BFu7ll_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu15ll, BFu7ll_Us_BFu15ll)
//============================================================================


struct  BFu7ll_Us_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Us_BFu15s) C1{ FL:7 Fs Fs:15}



static void Test_BFu7ll_Us_BFu15s()
{
  {
    init_simple_test("BFu7ll_Us_BFu15s");
    static STRUCT_IF_C BFu7ll_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu15s, BFu7ll_Us_BFu15s)
//============================================================================


struct  BFu7ll_Us_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Us_BFu16i) C1{ FL:7 Fs Fi:16}



static void Test_BFu7ll_Us_BFu16i()
{
  {
    init_simple_test("BFu7ll_Us_BFu16i");
    static STRUCT_IF_C BFu7ll_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu16i, BFu7ll_Us_BFu16i)
//============================================================================


struct  BFu7ll_Us_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Us_BFu16ll) C1{ FL:7 Fs FL:16}



static void Test_BFu7ll_Us_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu16ll");
    static STRUCT_IF_C BFu7ll_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu16ll, BFu7ll_Us_BFu16ll)
//============================================================================


struct  BFu7ll_Us_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Us_BFu16s) C1{ FL:7 Fs Fs:16}



static void Test_BFu7ll_Us_BFu16s()
{
  {
    init_simple_test("BFu7ll_Us_BFu16s");
    static STRUCT_IF_C BFu7ll_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu16s, BFu7ll_Us_BFu16s)
//============================================================================


struct  BFu7ll_Us_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Us_BFu17i) C1{ FL:7 Fs Fi:17}



static void Test_BFu7ll_Us_BFu17i()
{
  {
    init_simple_test("BFu7ll_Us_BFu17i");
    static STRUCT_IF_C BFu7ll_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu17i, BFu7ll_Us_BFu17i)
//============================================================================


struct  BFu7ll_Us_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Us_BFu17ll) C1{ FL:7 Fs FL:17}



static void Test_BFu7ll_Us_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu17ll");
    static STRUCT_IF_C BFu7ll_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu17ll, BFu7ll_Us_BFu17ll)
//============================================================================


struct  BFu7ll_Us_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Us_BFu1c) C1{ FL:7 Fs Fc:1}



static void Test_BFu7ll_Us_BFu1c()
{
  {
    init_simple_test("BFu7ll_Us_BFu1c");
    static STRUCT_IF_C BFu7ll_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu1c, BFu7ll_Us_BFu1c)
//============================================================================


struct  BFu7ll_Us_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Us_BFu1i) C1{ FL:7 Fs Fi:1}



static void Test_BFu7ll_Us_BFu1i()
{
  {
    init_simple_test("BFu7ll_Us_BFu1i");
    static STRUCT_IF_C BFu7ll_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu1i, BFu7ll_Us_BFu1i)
//============================================================================


struct  BFu7ll_Us_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Us_BFu1ll) C1{ FL:7 Fs FL:1}



static void Test_BFu7ll_Us_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu1ll");
    static STRUCT_IF_C BFu7ll_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu1ll, BFu7ll_Us_BFu1ll)
//============================================================================


struct  BFu7ll_Us_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Us_BFu1s) C1{ FL:7 Fs Fs:1}



static void Test_BFu7ll_Us_BFu1s()
{
  {
    init_simple_test("BFu7ll_Us_BFu1s");
    static STRUCT_IF_C BFu7ll_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu1s, BFu7ll_Us_BFu1s)
//============================================================================


struct  BFu7ll_Us_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Us_BFu31i) C1{ FL:7 Fs Fi:31}



static void Test_BFu7ll_Us_BFu31i()
{
  {
    init_simple_test("BFu7ll_Us_BFu31i");
    static STRUCT_IF_C BFu7ll_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu31i, BFu7ll_Us_BFu31i)
//============================================================================


struct  BFu7ll_Us_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Us_BFu31ll) C1{ FL:7 Fs FL:31}



static void Test_BFu7ll_Us_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu31ll");
    static STRUCT_IF_C BFu7ll_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu31ll, BFu7ll_Us_BFu31ll)
//============================================================================


struct  BFu7ll_Us_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Us_BFu32i) C1{ FL:7 Fs Fi:32}



static void Test_BFu7ll_Us_BFu32i()
{
  {
    init_simple_test("BFu7ll_Us_BFu32i");
    static STRUCT_IF_C BFu7ll_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu32i, BFu7ll_Us_BFu32i)
//============================================================================


struct  BFu7ll_Us_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Us_BFu32ll) C1{ FL:7 Fs FL:32}



static void Test_BFu7ll_Us_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu32ll");
    static STRUCT_IF_C BFu7ll_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu32ll, BFu7ll_Us_BFu32ll)
//============================================================================


struct  BFu7ll_Us_BFu33  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Us_BFu33) C1{ FL:7 Fs FL:33}



static void Test_BFu7ll_Us_BFu33()
{
  {
    init_simple_test("BFu7ll_Us_BFu33");
    static STRUCT_IF_C BFu7ll_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7ll_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7ll_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu33, BFu7ll_Us_BFu33)
//============================================================================


struct  BFu7ll_Us_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Us_BFu7c) C1{ FL:7 Fs Fc:7}



static void Test_BFu7ll_Us_BFu7c()
{
  {
    init_simple_test("BFu7ll_Us_BFu7c");
    static STRUCT_IF_C BFu7ll_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu7c, BFu7ll_Us_BFu7c)
//============================================================================


struct  BFu7ll_Us_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Us_BFu7i) C1{ FL:7 Fs Fi:7}



static void Test_BFu7ll_Us_BFu7i()
{
  {
    init_simple_test("BFu7ll_Us_BFu7i");
    static STRUCT_IF_C BFu7ll_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu7i, BFu7ll_Us_BFu7i)
//============================================================================


struct  BFu7ll_Us_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Us_BFu7ll) C1{ FL:7 Fs FL:7}



static void Test_BFu7ll_Us_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu7ll");
    static STRUCT_IF_C BFu7ll_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu7ll, BFu7ll_Us_BFu7ll)
//============================================================================


struct  BFu7ll_Us_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Us_BFu7s) C1{ FL:7 Fs Fs:7}



static void Test_BFu7ll_Us_BFu7s()
{
  {
    init_simple_test("BFu7ll_Us_BFu7s");
    static STRUCT_IF_C BFu7ll_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu7s, BFu7ll_Us_BFu7s)
//============================================================================


struct  BFu7ll_Us_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Us_BFu8c) C1{ FL:7 Fs Fc:8}



static void Test_BFu7ll_Us_BFu8c()
{
  {
    init_simple_test("BFu7ll_Us_BFu8c");
    static STRUCT_IF_C BFu7ll_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu8c, BFu7ll_Us_BFu8c)
//============================================================================


struct  BFu7ll_Us_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Us_BFu8i) C1{ FL:7 Fs Fi:8}



static void Test_BFu7ll_Us_BFu8i()
{
  {
    init_simple_test("BFu7ll_Us_BFu8i");
    static STRUCT_IF_C BFu7ll_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu8i, BFu7ll_Us_BFu8i)
//============================================================================


struct  BFu7ll_Us_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Us_BFu8ll) C1{ FL:7 Fs FL:8}



static void Test_BFu7ll_Us_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu8ll");
    static STRUCT_IF_C BFu7ll_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu8ll, BFu7ll_Us_BFu8ll)
//============================================================================


struct  BFu7ll_Us_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Us_BFu8s) C1{ FL:7 Fs Fs:8}



static void Test_BFu7ll_Us_BFu8s()
{
  {
    init_simple_test("BFu7ll_Us_BFu8s");
    static STRUCT_IF_C BFu7ll_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu8s, BFu7ll_Us_BFu8s)
//============================================================================


struct  BFu7ll_Us_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Us_BFu9i) C1{ FL:7 Fs Fi:9}



static void Test_BFu7ll_Us_BFu9i()
{
  {
    init_simple_test("BFu7ll_Us_BFu9i");
    static STRUCT_IF_C BFu7ll_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu9i, BFu7ll_Us_BFu9i)
//============================================================================


struct  BFu7ll_Us_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Us_BFu9ll) C1{ FL:7 Fs FL:9}



static void Test_BFu7ll_Us_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu9ll");
    static STRUCT_IF_C BFu7ll_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu9ll, BFu7ll_Us_BFu9ll)
//============================================================================


struct  BFu7ll_Us_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Us_BFu9s) C1{ FL:7 Fs Fs:9}



static void Test_BFu7ll_Us_BFu9s()
{
  {
    init_simple_test("BFu7ll_Us_BFu9s");
    static STRUCT_IF_C BFu7ll_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_BFu9s, BFu7ll_Us_BFu9s)
//============================================================================


struct  BFu7ll_Us_C  {
  __tsu64 v1:7;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu7ll_Us_C) C1{ FL:7 Fs Fc}



static void Test_BFu7ll_Us_C()
{
  {
    init_simple_test("BFu7ll_Us_C");
    static STRUCT_IF_C BFu7ll_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_C");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_C, BFu7ll_Us_C)
//============================================================================


struct  BFu7ll_Us_D  {
  __tsu64 v1:7;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu7ll_Us_D) C1{ FL:7 Fs FL}



static void Test_BFu7ll_Us_D()
{
  {
    init_simple_test("BFu7ll_Us_D");
    static STRUCT_IF_C BFu7ll_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_D");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_D, BFu7ll_Us_D)
//============================================================================


struct  BFu7ll_Us_F  {
  __tsu64 v1:7;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu7ll_Us_F) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_Us_F()
{
  {
    init_simple_test("BFu7ll_Us_F");
    static STRUCT_IF_C BFu7ll_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_F");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_F, BFu7ll_Us_F)
//============================================================================


struct  BFu7ll_Us_I  {
  __tsu64 v1:7;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu7ll_Us_I) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_Us_I()
{
  {
    init_simple_test("BFu7ll_Us_I");
    static STRUCT_IF_C BFu7ll_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_I");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_I, BFu7ll_Us_I)
//============================================================================


struct  BFu7ll_Us_Ip  {
  __tsu64 v1:7;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu7ll_Us_Ip) C1{ FL:7 Fs Fp}



static void Test_BFu7ll_Us_Ip()
{
  {
    init_simple_test("BFu7ll_Us_Ip");
    static STRUCT_IF_C BFu7ll_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Ip, BFu7ll_Us_Ip)
//============================================================================


struct  BFu7ll_Us_L  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Us_L) C1{ FL:7 Fs FL}



static void Test_BFu7ll_Us_L()
{
  {
    init_simple_test("BFu7ll_Us_L");
    static STRUCT_IF_C BFu7ll_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_L");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_L, BFu7ll_Us_L)
//============================================================================


struct  BFu7ll_Us_S  {
  __tsu64 v1:7;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu7ll_Us_S) C1{ FL:7 Fs[2]}



static void Test_BFu7ll_Us_S()
{
  {
    init_simple_test("BFu7ll_Us_S");
    static STRUCT_IF_C BFu7ll_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_S");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_S, BFu7ll_Us_S)
//============================================================================


struct  BFu7ll_Us_Uc  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Us_Uc) C1{ FL:7 Fs Fc}



static void Test_BFu7ll_Us_Uc()
{
  {
    init_simple_test("BFu7ll_Us_Uc");
    static STRUCT_IF_C BFu7ll_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Uc, BFu7ll_Us_Uc)
//============================================================================


struct  BFu7ll_Us_Ui  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Us_Ui) C1{ FL:7 Fs Fi}



static void Test_BFu7ll_Us_Ui()
{
  {
    init_simple_test("BFu7ll_Us_Ui");
    static STRUCT_IF_C BFu7ll_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Ui, BFu7ll_Us_Ui)
//============================================================================


struct  BFu7ll_Us_Ul  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Us_Ul) C1{ FL:7 Fs FL}



static void Test_BFu7ll_Us_Ul()
{
  {
    init_simple_test("BFu7ll_Us_Ul");
    static STRUCT_IF_C BFu7ll_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Ul, BFu7ll_Us_Ul)
//============================================================================


struct  BFu7ll_Us_Us  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Us_Us) C1{ FL:7 Fs[2]}



static void Test_BFu7ll_Us_Us()
{
  {
    init_simple_test("BFu7ll_Us_Us");
    static STRUCT_IF_C BFu7ll_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Us_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Us");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7ll_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Us, BFu7ll_Us_Us)
//============================================================================


struct  BFu7ll_Us_Vp  {
  __tsu64 v1:7;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu7ll_Us_Vp) C1{ FL:7 Fs Fp}



static void Test_BFu7ll_Us_Vp()
{
  {
    init_simple_test("BFu7ll_Us_Vp");
    static STRUCT_IF_C BFu7ll_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Us_Vp, BFu7ll_Us_Vp)
//============================================================================


struct  BFu7ll_Vp  {
  __tsu64 v1:7;
  void *v2;
};
//SIG(1 BFu7ll_Vp) C1{ FL:7 Fp}



static void Test_BFu7ll_Vp()
{
  {
    init_simple_test("BFu7ll_Vp");
    static STRUCT_IF_C BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp, BFu7ll_Vp)
//============================================================================


struct  BFu7ll_Vp_BFu15i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_Vp_BFu15i) C1{ FL:7 Fp Fi:15}



static void Test_BFu7ll_Vp_BFu15i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu15i");
    static STRUCT_IF_C BFu7ll_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu15i, BFu7ll_Vp_BFu15i)
//============================================================================


struct  BFu7ll_Vp_BFu15ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_Vp_BFu15ll) C1{ FL:7 Fp FL:15}



static void Test_BFu7ll_Vp_BFu15ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu15ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu15ll, BFu7ll_Vp_BFu15ll)
//============================================================================


struct  BFu7ll_Vp_BFu15s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_Vp_BFu15s) C1{ FL:7 Fp Fs:15}



static void Test_BFu7ll_Vp_BFu15s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu15s");
    static STRUCT_IF_C BFu7ll_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7ll_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7ll_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu15s, BFu7ll_Vp_BFu15s)
//============================================================================


struct  BFu7ll_Vp_BFu16i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_Vp_BFu16i) C1{ FL:7 Fp Fi:16}



static void Test_BFu7ll_Vp_BFu16i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu16i");
    static STRUCT_IF_C BFu7ll_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu16i, BFu7ll_Vp_BFu16i)
//============================================================================


struct  BFu7ll_Vp_BFu16ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_Vp_BFu16ll) C1{ FL:7 Fp FL:16}



static void Test_BFu7ll_Vp_BFu16ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu16ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu16ll, BFu7ll_Vp_BFu16ll)
//============================================================================


struct  BFu7ll_Vp_BFu16s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_Vp_BFu16s) C1{ FL:7 Fp Fs:16}



static void Test_BFu7ll_Vp_BFu16s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu16s");
    static STRUCT_IF_C BFu7ll_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7ll_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7ll_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu16s, BFu7ll_Vp_BFu16s)
//============================================================================


struct  BFu7ll_Vp_BFu17i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_Vp_BFu17i) C1{ FL:7 Fp Fi:17}



static void Test_BFu7ll_Vp_BFu17i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu17i");
    static STRUCT_IF_C BFu7ll_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7ll_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7ll_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu17i, BFu7ll_Vp_BFu17i)
//============================================================================


struct  BFu7ll_Vp_BFu17ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_Vp_BFu17ll) C1{ FL:7 Fp FL:17}



static void Test_BFu7ll_Vp_BFu17ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu17ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7ll_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7ll_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu17ll, BFu7ll_Vp_BFu17ll)
//============================================================================


struct  BFu7ll_Vp_BFu1c  {
  __tsu64 v1:7;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_Vp_BFu1c) C1{ FL:7 Fp Fc:1}



static void Test_BFu7ll_Vp_BFu1c()
{
  {
    init_simple_test("BFu7ll_Vp_BFu1c");
    static STRUCT_IF_C BFu7ll_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu1c, BFu7ll_Vp_BFu1c)
//============================================================================


struct  BFu7ll_Vp_BFu1i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_Vp_BFu1i) C1{ FL:7 Fp Fi:1}



static void Test_BFu7ll_Vp_BFu1i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu1i");
    static STRUCT_IF_C BFu7ll_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu1i, BFu7ll_Vp_BFu1i)
//============================================================================


struct  BFu7ll_Vp_BFu1ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_Vp_BFu1ll) C1{ FL:7 Fp FL:1}



static void Test_BFu7ll_Vp_BFu1ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu1ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu1ll, BFu7ll_Vp_BFu1ll)
//============================================================================


struct  BFu7ll_Vp_BFu1s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_Vp_BFu1s) C1{ FL:7 Fp Fs:1}



static void Test_BFu7ll_Vp_BFu1s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu1s");
    static STRUCT_IF_C BFu7ll_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7ll_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu1s, BFu7ll_Vp_BFu1s)
//============================================================================


struct  BFu7ll_Vp_BFu31i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_Vp_BFu31i) C1{ FL:7 Fp Fi:31}



static void Test_BFu7ll_Vp_BFu31i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu31i");
    static STRUCT_IF_C BFu7ll_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7ll_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7ll_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu31i, BFu7ll_Vp_BFu31i)
//============================================================================


struct  BFu7ll_Vp_BFu31ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_Vp_BFu31ll) C1{ FL:7 Fp FL:31}



static void Test_BFu7ll_Vp_BFu31ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu31ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7ll_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7ll_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu31ll, BFu7ll_Vp_BFu31ll)
//============================================================================


struct  BFu7ll_Vp_BFu32i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_Vp_BFu32i) C1{ FL:7 Fp Fi:32}



static void Test_BFu7ll_Vp_BFu32i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu32i");
    static STRUCT_IF_C BFu7ll_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7ll_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7ll_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu32i, BFu7ll_Vp_BFu32i)
//============================================================================


struct  BFu7ll_Vp_BFu32ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_Vp_BFu32ll) C1{ FL:7 Fp FL:32}



static void Test_BFu7ll_Vp_BFu32ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu32ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7ll_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7ll_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu32ll, BFu7ll_Vp_BFu32ll)
//============================================================================


struct  BFu7ll_Vp_BFu33  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_Vp_BFu33) C1{ FL:7 Fp FL:33}



static void Test_BFu7ll_Vp_BFu33()
{
  {
    init_simple_test("BFu7ll_Vp_BFu33");
    static STRUCT_IF_C BFu7ll_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7ll_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7ll_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu33, BFu7ll_Vp_BFu33)
//============================================================================


struct  BFu7ll_Vp_BFu7c  {
  __tsu64 v1:7;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_Vp_BFu7c) C1{ FL:7 Fp Fc:7}



static void Test_BFu7ll_Vp_BFu7c()
{
  {
    init_simple_test("BFu7ll_Vp_BFu7c");
    static STRUCT_IF_C BFu7ll_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu7c, BFu7ll_Vp_BFu7c)
//============================================================================


struct  BFu7ll_Vp_BFu7i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_Vp_BFu7i) C1{ FL:7 Fp Fi:7}



static void Test_BFu7ll_Vp_BFu7i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu7i");
    static STRUCT_IF_C BFu7ll_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu7i, BFu7ll_Vp_BFu7i)
//============================================================================


struct  BFu7ll_Vp_BFu7ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_Vp_BFu7ll) C1{ FL:7 Fp FL:7}



static void Test_BFu7ll_Vp_BFu7ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu7ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu7ll, BFu7ll_Vp_BFu7ll)
//============================================================================


struct  BFu7ll_Vp_BFu7s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_Vp_BFu7s) C1{ FL:7 Fp Fs:7}



static void Test_BFu7ll_Vp_BFu7s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu7s");
    static STRUCT_IF_C BFu7ll_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7ll_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu7s, BFu7ll_Vp_BFu7s)
//============================================================================


struct  BFu7ll_Vp_BFu8c  {
  __tsu64 v1:7;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_Vp_BFu8c) C1{ FL:7 Fp Fc:8}



static void Test_BFu7ll_Vp_BFu8c()
{
  {
    init_simple_test("BFu7ll_Vp_BFu8c");
    static STRUCT_IF_C BFu7ll_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu8c, BFu7ll_Vp_BFu8c)
//============================================================================


struct  BFu7ll_Vp_BFu8i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_Vp_BFu8i) C1{ FL:7 Fp Fi:8}



static void Test_BFu7ll_Vp_BFu8i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu8i");
    static STRUCT_IF_C BFu7ll_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu8i, BFu7ll_Vp_BFu8i)
//============================================================================


struct  BFu7ll_Vp_BFu8ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_Vp_BFu8ll) C1{ FL:7 Fp FL:8}



static void Test_BFu7ll_Vp_BFu8ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu8ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu8ll, BFu7ll_Vp_BFu8ll)
//============================================================================


struct  BFu7ll_Vp_BFu8s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_Vp_BFu8s) C1{ FL:7 Fp Fs:8}



static void Test_BFu7ll_Vp_BFu8s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu8s");
    static STRUCT_IF_C BFu7ll_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7ll_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7ll_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu8s, BFu7ll_Vp_BFu8s)
//============================================================================


struct  BFu7ll_Vp_BFu9i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_Vp_BFu9i) C1{ FL:7 Fp Fi:9}



static void Test_BFu7ll_Vp_BFu9i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu9i");
    static STRUCT_IF_C BFu7ll_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu9i, BFu7ll_Vp_BFu9i)
//============================================================================


struct  BFu7ll_Vp_BFu9ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_Vp_BFu9ll) C1{ FL:7 Fp FL:9}



static void Test_BFu7ll_Vp_BFu9ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu9ll");
    static STRUCT_IF_C BFu7ll_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu9ll, BFu7ll_Vp_BFu9ll)
//============================================================================


struct  BFu7ll_Vp_BFu9s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_Vp_BFu9s) C1{ FL:7 Fp Fs:9}



static void Test_BFu7ll_Vp_BFu9s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu9s");
    static STRUCT_IF_C BFu7ll_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7ll_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7ll_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_BFu9s, BFu7ll_Vp_BFu9s)
//============================================================================


struct  BFu7ll_Vp_C  {
  __tsu64 v1:7;
  void *v2;
  char v3;
};
//SIG(1 BFu7ll_Vp_C) C1{ FL:7 Fp Fc}



static void Test_BFu7ll_Vp_C()
{
  {
    init_simple_test("BFu7ll_Vp_C");
    static STRUCT_IF_C BFu7ll_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_C, BFu7ll_Vp_C)
//============================================================================


struct  BFu7ll_Vp_D  {
  __tsu64 v1:7;
  void *v2;
  double v3;
};
//SIG(1 BFu7ll_Vp_D) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Vp_D()
{
  {
    init_simple_test("BFu7ll_Vp_D");
    static STRUCT_IF_C BFu7ll_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_D, BFu7ll_Vp_D)
//============================================================================


struct  BFu7ll_Vp_F  {
  __tsu64 v1:7;
  void *v2;
  float v3;
};
//SIG(1 BFu7ll_Vp_F) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Vp_F()
{
  {
    init_simple_test("BFu7ll_Vp_F");
    static STRUCT_IF_C BFu7ll_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_F, BFu7ll_Vp_F)
//============================================================================


struct  BFu7ll_Vp_I  {
  __tsu64 v1:7;
  void *v2;
  int v3;
};
//SIG(1 BFu7ll_Vp_I) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Vp_I()
{
  {
    init_simple_test("BFu7ll_Vp_I");
    static STRUCT_IF_C BFu7ll_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_I, BFu7ll_Vp_I)
//============================================================================


struct  BFu7ll_Vp_Ip  {
  __tsu64 v1:7;
  void *v2;
  int *v3;
};
//SIG(1 BFu7ll_Vp_Ip) C1{ FL:7 Fp[2]}



static void Test_BFu7ll_Vp_Ip()
{
  {
    init_simple_test("BFu7ll_Vp_Ip");
    static STRUCT_IF_C BFu7ll_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Ip, BFu7ll_Vp_Ip)
//============================================================================


struct  BFu7ll_Vp_L  {
  __tsu64 v1:7;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu7ll_Vp_L) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Vp_L()
{
  {
    init_simple_test("BFu7ll_Vp_L");
    static STRUCT_IF_C BFu7ll_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_L, BFu7ll_Vp_L)
//============================================================================


struct  BFu7ll_Vp_S  {
  __tsu64 v1:7;
  void *v2;
  short v3;
};
//SIG(1 BFu7ll_Vp_S) C1{ FL:7 Fp Fs}



static void Test_BFu7ll_Vp_S()
{
  {
    init_simple_test("BFu7ll_Vp_S");
    static STRUCT_IF_C BFu7ll_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_S, BFu7ll_Vp_S)
//============================================================================


struct  BFu7ll_Vp_Uc  {
  __tsu64 v1:7;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu7ll_Vp_Uc) C1{ FL:7 Fp Fc}



static void Test_BFu7ll_Vp_Uc()
{
  {
    init_simple_test("BFu7ll_Vp_Uc");
    static STRUCT_IF_C BFu7ll_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Uc, BFu7ll_Vp_Uc)
//============================================================================


struct  BFu7ll_Vp_Ui  {
  __tsu64 v1:7;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu7ll_Vp_Ui) C1{ FL:7 Fp Fi}



static void Test_BFu7ll_Vp_Ui()
{
  {
    init_simple_test("BFu7ll_Vp_Ui");
    static STRUCT_IF_C BFu7ll_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Ui, BFu7ll_Vp_Ui)
//============================================================================


struct  BFu7ll_Vp_Ul  {
  __tsu64 v1:7;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu7ll_Vp_Ul) C1{ FL:7 Fp FL}



static void Test_BFu7ll_Vp_Ul()
{
  {
    init_simple_test("BFu7ll_Vp_Ul");
    static STRUCT_IF_C BFu7ll_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7ll_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Ul, BFu7ll_Vp_Ul)
//============================================================================


struct  BFu7ll_Vp_Us  {
  __tsu64 v1:7;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu7ll_Vp_Us) C1{ FL:7 Fp Fs}



static void Test_BFu7ll_Vp_Us()
{
  {
    init_simple_test("BFu7ll_Vp_Us");
    static STRUCT_IF_C BFu7ll_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Us, BFu7ll_Vp_Us)
//============================================================================


struct  BFu7ll_Vp_Vp  {
  __tsu64 v1:7;
  void *v2;
  void *v3;
};
//SIG(1 BFu7ll_Vp_Vp) C1{ FL:7 Fp[2]}



static void Test_BFu7ll_Vp_Vp()
{
  {
    init_simple_test("BFu7ll_Vp_Vp");
    static STRUCT_IF_C BFu7ll_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7ll_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7ll_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_Vp_Vp, BFu7ll_Vp_Vp)
//============================================================================


struct  BFu7s  {
  unsigned short v1:7;
};
//SIG(1 BFu7s) C1{ Fs:7}



static void Test_BFu7s()
{
  {
    init_simple_test("BFu7s");
    static STRUCT_IF_C BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s, BFu7s)
//============================================================================


struct  BFu7s_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
};
//SIG(1 BFu7s_BFs7c) C1{ Fs:7 Fc:7}



static void Test_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c, BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c, BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFs7c, BFu7s_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFs7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFs7i, BFu7s_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFs7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFs7ll, BFu7s_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFs7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFs7s, BFu7s_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFu7c, BFu7s_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFu7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFu7i, BFu7s_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFu7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFu7ll, BFu7s_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7c_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7c_BFu7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7c_BFu7s, BFu7s_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i) C1{ Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i, BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFs7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFs7c, BFu7s_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFs7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFs7i, BFu7s_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFs7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFs7ll, BFu7s_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFs7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFs7s, BFu7s_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFu7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFu7c, BFu7s_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFu7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFu7i, BFu7s_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFu7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFu7ll, BFu7s_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7i_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7i_BFu7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7i_BFu7s, BFu7s_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll) C1{ Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll, BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFs7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFs7c, BFu7s_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFs7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFs7i, BFu7s_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFs7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFs7ll, BFu7s_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFs7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFs7s, BFu7s_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFu7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFu7c, BFu7s_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFu7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFu7i, BFu7s_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFu7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFu7ll, BFu7s_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7ll_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7ll_BFu7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7ll_BFu7s, BFu7s_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s) C1{ Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s, BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFs7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFs7c, BFu7s_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFs7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFs7i, BFu7s_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFs7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFs7ll, BFu7s_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFs7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFs7s, BFu7s_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFu7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFu7c, BFu7s_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFu7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFu7i, BFu7s_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFu7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFu7ll, BFu7s_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFs7s_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFs7s_BFu7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFs7s_BFu7s, BFu7s_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c, BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFs7c, BFu7s_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFs7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFs7i, BFu7s_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFs7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFs7ll, BFu7s_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFs7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFs7s, BFu7s_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFu7c, BFu7s_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFu7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFu7i, BFu7s_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFu7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFu7ll, BFu7s_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7c_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7c_BFu7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7c_BFu7s, BFu7s_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i) C1{ Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i, BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFs7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFs7c, BFu7s_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFs7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFs7i, BFu7s_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFs7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFs7ll, BFu7s_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFs7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFs7s, BFu7s_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFu7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFu7c, BFu7s_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFu7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFu7i, BFu7s_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFu7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFu7ll, BFu7s_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7i_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7i_BFu7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7i_BFu7s, BFu7s_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll) C1{ Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll, BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFs7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFs7c, BFu7s_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFs7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFs7i, BFu7s_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFs7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFs7ll, BFu7s_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFs7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFs7s, BFu7s_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFu7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFu7c, BFu7s_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFu7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFu7i, BFu7s_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFu7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFu7ll, BFu7s_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7ll_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7ll_BFu7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7ll_BFu7s, BFu7s_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s) C1{ Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s, BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFs7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFs7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFs7c, BFu7s_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFs7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFs7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFs7i, BFu7s_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFs7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFs7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFs7ll, BFu7s_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFs7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFs7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFs7s, BFu7s_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFu7c  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFu7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFu7c, BFu7s_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFu7i  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFu7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFu7i, BFu7s_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFu7ll  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFu7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFu7ll, BFu7s_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7c_BFu7s_BFu7s  {
  unsigned short v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7c_BFu7s_BFu7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7c_BFu7s_BFu7s, BFu7s_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
};
//SIG(1 BFu7s_BFs7i) C1{ Fs:7 Fi:7}



static void Test_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i, BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c) C1{ Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c, BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFs7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFs7c, BFu7s_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFs7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFs7i, BFu7s_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFs7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFs7ll, BFu7s_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFs7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFs7s, BFu7s_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFu7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFu7c, BFu7s_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFu7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFu7i, BFu7s_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFu7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFu7ll, BFu7s_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7c_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7c_BFu7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7c_BFu7s, BFu7s_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i, BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFs7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFs7c, BFu7s_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFs7i, BFu7s_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFs7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFs7ll, BFu7s_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFs7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFs7s, BFu7s_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFu7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFu7c, BFu7s_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFu7i, BFu7s_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFu7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFu7ll, BFu7s_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7i_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7i_BFu7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7i_BFu7s, BFu7s_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll) C1{ Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll, BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFs7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFs7c, BFu7s_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFs7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFs7i, BFu7s_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFs7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFs7ll, BFu7s_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFs7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFs7s, BFu7s_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFu7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFu7c, BFu7s_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFu7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFu7i, BFu7s_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFu7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFu7ll, BFu7s_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7ll_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7ll_BFu7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7ll_BFu7s, BFu7s_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s) C1{ Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s, BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFs7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFs7c, BFu7s_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFs7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFs7i, BFu7s_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFs7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFs7ll, BFu7s_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFs7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFs7s, BFu7s_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFu7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFu7c, BFu7s_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFu7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFu7i, BFu7s_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFu7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFu7ll, BFu7s_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFs7s_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFs7s_BFu7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFs7s_BFu7s, BFu7s_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c) C1{ Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c, BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFs7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFs7c, BFu7s_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFs7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFs7i, BFu7s_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFs7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFs7ll, BFu7s_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFs7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFs7s, BFu7s_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFu7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFu7c, BFu7s_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFu7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFu7i, BFu7s_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFu7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFu7ll, BFu7s_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7c_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7c_BFu7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7c_BFu7s, BFu7s_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i, BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFs7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFs7c, BFu7s_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFs7i, BFu7s_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFs7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFs7ll, BFu7s_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFs7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFs7s, BFu7s_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFu7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFu7c, BFu7s_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFu7i, BFu7s_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFu7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFu7ll, BFu7s_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7i_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7i_BFu7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7i_BFu7s, BFu7s_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll) C1{ Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll, BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFs7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFs7c, BFu7s_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFs7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFs7i, BFu7s_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFs7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFs7ll, BFu7s_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFs7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFs7s, BFu7s_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFu7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFu7c, BFu7s_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFu7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFu7i, BFu7s_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFu7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFu7ll, BFu7s_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7ll_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7ll_BFu7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7ll_BFu7s, BFu7s_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s) C1{ Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s, BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFs7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFs7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFs7c, BFu7s_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFs7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFs7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFs7i, BFu7s_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFs7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFs7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFs7ll, BFu7s_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFs7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFs7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFs7s, BFu7s_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFu7c  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFu7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFu7c, BFu7s_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFu7i  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFu7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFu7i, BFu7s_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFu7ll  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFu7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFu7ll, BFu7s_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7i_BFu7s_BFu7s  {
  unsigned short v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7i_BFu7s_BFu7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7i_BFu7s_BFu7s, BFu7s_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFu7s_BFs7ll) C1{ Fs:7 FL:7}



static void Test_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll, BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c) C1{ Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c, BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFs7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFs7c, BFu7s_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFs7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFs7i, BFu7s_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFs7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFs7ll, BFu7s_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFs7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFs7s, BFu7s_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFu7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFu7c, BFu7s_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFu7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFu7i, BFu7s_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFu7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFu7ll, BFu7s_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7c_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7c_BFu7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7c_BFu7s, BFu7s_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i) C1{ Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i, BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFs7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFs7c, BFu7s_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFs7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFs7i, BFu7s_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFs7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFs7ll, BFu7s_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFs7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFs7s, BFu7s_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFu7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFu7c, BFu7s_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFu7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFu7i, BFu7s_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFu7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFu7ll, BFu7s_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7i_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7i_BFu7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7i_BFu7s, BFu7s_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll, BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFs7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFs7c, BFu7s_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFs7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFs7i, BFu7s_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFs7ll, BFu7s_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFs7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFs7s, BFu7s_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFu7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFu7c, BFu7s_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFu7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFu7i, BFu7s_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFu7ll, BFu7s_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7ll_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7ll_BFu7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7ll_BFu7s, BFu7s_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s) C1{ Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s, BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFs7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFs7c, BFu7s_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFs7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFs7i, BFu7s_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFs7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFs7ll, BFu7s_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFs7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFs7s, BFu7s_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFu7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFu7c, BFu7s_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFu7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFu7i, BFu7s_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFu7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFu7ll, BFu7s_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFs7s_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFs7s_BFu7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFs7s_BFu7s, BFu7s_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c) C1{ Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c, BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFs7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFs7c, BFu7s_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFs7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFs7i, BFu7s_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFs7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFs7ll, BFu7s_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFs7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFs7s, BFu7s_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFu7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFu7c, BFu7s_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFu7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFu7i, BFu7s_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFu7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFu7ll, BFu7s_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7c_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7c_BFu7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7c_BFu7s, BFu7s_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i) C1{ Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i, BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFs7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFs7c, BFu7s_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFs7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFs7i, BFu7s_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFs7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFs7ll, BFu7s_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFs7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFs7s, BFu7s_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFu7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFu7c, BFu7s_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFu7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFu7i, BFu7s_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFu7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFu7ll, BFu7s_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7i_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7i_BFu7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7i_BFu7s, BFu7s_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll, BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFs7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFs7c, BFu7s_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFs7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFs7i, BFu7s_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFs7ll, BFu7s_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFs7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFs7s, BFu7s_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFu7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFu7c, BFu7s_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFu7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFu7i, BFu7s_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFu7ll, BFu7s_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7ll_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7ll_BFu7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7ll_BFu7s, BFu7s_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s) C1{ Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s, BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFs7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFs7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFs7c, BFu7s_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFs7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFs7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFs7i, BFu7s_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFs7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFs7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFs7ll, BFu7s_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFs7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFs7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFs7s, BFu7s_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFu7c  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFu7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFu7c, BFu7s_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFu7i  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFu7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFu7i, BFu7s_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFu7ll  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFu7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFu7ll, BFu7s_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7ll_BFu7s_BFu7s  {
  unsigned short v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7ll_BFu7s_BFu7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7ll_BFu7s_BFu7s, BFu7s_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
};
//SIG(1 BFu7s_BFs7s) C1{ Fs:7 Fs:7}



static void Test_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s, BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c) C1{ Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c, BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFs7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFs7c, BFu7s_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFs7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFs7i, BFu7s_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFs7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFs7ll, BFu7s_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFs7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFs7s, BFu7s_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFu7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFu7c, BFu7s_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFu7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFu7i, BFu7s_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFu7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFu7ll, BFu7s_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7c_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7c_BFu7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7c_BFu7s, BFu7s_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i) C1{ Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i, BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFs7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFs7c, BFu7s_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFs7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFs7i, BFu7s_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFs7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFs7ll, BFu7s_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFs7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFs7s, BFu7s_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFu7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFu7c, BFu7s_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFu7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFu7i, BFu7s_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFu7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFu7ll, BFu7s_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7i_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7i_BFu7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7i_BFu7s, BFu7s_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll) C1{ Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll, BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFs7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFs7c, BFu7s_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFs7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFs7i, BFu7s_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFs7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFs7ll, BFu7s_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFs7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFs7s, BFu7s_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFu7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFu7c, BFu7s_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFu7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFu7i, BFu7s_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFu7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFu7ll, BFu7s_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7ll_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7ll_BFu7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7ll_BFu7s, BFu7s_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s, BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFs7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFs7c, BFu7s_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFs7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFs7i, BFu7s_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFs7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFs7ll, BFu7s_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFs7s, BFu7s_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFu7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFu7c, BFu7s_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFu7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFu7i, BFu7s_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFu7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFu7ll, BFu7s_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFs7s_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFs7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFs7s_BFu7s, BFu7s_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c) C1{ Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c, BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFs7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFs7c, BFu7s_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFs7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFs7i, BFu7s_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFs7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFs7ll, BFu7s_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFs7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFs7s, BFu7s_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFu7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFu7c, BFu7s_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFu7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFu7i, BFu7s_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFu7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFu7ll, BFu7s_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7c_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7c_BFu7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7c_BFu7s, BFu7s_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i) C1{ Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i, BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFs7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFs7c, BFu7s_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFs7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFs7i, BFu7s_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFs7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFs7ll, BFu7s_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFs7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFs7s, BFu7s_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFu7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFu7c, BFu7s_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFu7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFu7i, BFu7s_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFu7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFu7ll, BFu7s_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7i_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7i_BFu7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7i_BFu7s, BFu7s_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll) C1{ Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll, BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFs7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFs7c, BFu7s_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFs7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFs7i, BFu7s_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFs7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFs7ll, BFu7s_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFs7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFs7s, BFu7s_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFu7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFu7c, BFu7s_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFu7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFu7i, BFu7s_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFu7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFu7ll, BFu7s_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7ll_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7ll_BFu7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7ll_BFu7s, BFu7s_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s, BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFs7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFs7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFs7c, BFu7s_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFs7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFs7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFs7i, BFu7s_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFs7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFs7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFs7ll, BFu7s_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFs7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFs7s, BFu7s_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFu7c  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFu7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFu7c, BFu7s_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFu7i  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFu7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFu7i, BFu7s_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFu7ll  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFu7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFu7ll, BFu7s_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFs7s_BFu7s_BFu7s  {
  unsigned short v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFs7s_BFu7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFs7s_BFu7s_BFu7s, BFu7s_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu7s_BFu15i) C1{ Fs:7 Fi:15}



static void Test_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i, BFu7s_BFu15i)
//============================================================================


struct  BFu7s_BFu15i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu15i_BFu15i) C1{ Fs:7 Fi:15 Fi:15}



static void Test_BFu7s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu15i, BFu7s_BFu15i_BFu15i)
//============================================================================


struct  BFu7s_BFu15i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu15i_BFu15ll) C1{ Fs:7 Fi:15 FL:15}



static void Test_BFu7s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu15ll, BFu7s_BFu15i_BFu15ll)
//============================================================================


struct  BFu7s_BFu15i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu15i_BFu15s) C1{ Fs:7 Fi:15 Fs:15}



static void Test_BFu7s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu15s, BFu7s_BFu15i_BFu15s)
//============================================================================


struct  BFu7s_BFu15i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu15i_BFu16i) C1{ Fs:7 Fi:15 Fi:16}



static void Test_BFu7s_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu16i, BFu7s_BFu15i_BFu16i)
//============================================================================


struct  BFu7s_BFu15i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu15i_BFu16ll) C1{ Fs:7 Fi:15 FL:16}



static void Test_BFu7s_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu16ll, BFu7s_BFu15i_BFu16ll)
//============================================================================


struct  BFu7s_BFu15i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu15i_BFu16s) C1{ Fs:7 Fi:15 Fs:16}



static void Test_BFu7s_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu16s, BFu7s_BFu15i_BFu16s)
//============================================================================


struct  BFu7s_BFu15i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu15i_BFu17i) C1{ Fs:7 Fi:15 Fi:17}



static void Test_BFu7s_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu17i, BFu7s_BFu15i_BFu17i)
//============================================================================


struct  BFu7s_BFu15i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu15i_BFu17ll) C1{ Fs:7 Fi:15 FL:17}



static void Test_BFu7s_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu17ll, BFu7s_BFu15i_BFu17ll)
//============================================================================


struct  BFu7s_BFu15i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu15i_BFu1c) C1{ Fs:7 Fi:15 Fc:1}



static void Test_BFu7s_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu1c, BFu7s_BFu15i_BFu1c)
//============================================================================


struct  BFu7s_BFu15i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu15i_BFu1i) C1{ Fs:7 Fi:15 Fi:1}



static void Test_BFu7s_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu1i, BFu7s_BFu15i_BFu1i)
//============================================================================


struct  BFu7s_BFu15i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu15i_BFu1ll) C1{ Fs:7 Fi:15 FL:1}



static void Test_BFu7s_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu1ll, BFu7s_BFu15i_BFu1ll)
//============================================================================


struct  BFu7s_BFu15i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu15i_BFu1s) C1{ Fs:7 Fi:15 Fs:1}



static void Test_BFu7s_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu1s, BFu7s_BFu15i_BFu1s)
//============================================================================


struct  BFu7s_BFu15i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu15i_BFu31i) C1{ Fs:7 Fi:15 Fi:31}



static void Test_BFu7s_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu31i, BFu7s_BFu15i_BFu31i)
//============================================================================


struct  BFu7s_BFu15i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu15i_BFu31ll) C1{ Fs:7 Fi:15 FL:31}



static void Test_BFu7s_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7s_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu31ll, BFu7s_BFu15i_BFu31ll)
//============================================================================


struct  BFu7s_BFu15i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu15i_BFu32i) C1{ Fs:7 Fi:15 Fi:32}



static void Test_BFu7s_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu32i, BFu7s_BFu15i_BFu32i)
//============================================================================


struct  BFu7s_BFu15i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu15i_BFu32ll) C1{ Fs:7 Fi:15 FL:32}



static void Test_BFu7s_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7s_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu32ll, BFu7s_BFu15i_BFu32ll)
//============================================================================


struct  BFu7s_BFu15i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu15i_BFu33) C1{ Fs:7 Fi:15 FL:33}



static void Test_BFu7s_BFu15i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu33");
    static STRUCT_IF_C BFu7s_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7s_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu33, BFu7s_BFu15i_BFu33)
//============================================================================


struct  BFu7s_BFu15i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu15i_BFu7c) C1{ Fs:7 Fi:15 Fc:7}



static void Test_BFu7s_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu7c, BFu7s_BFu15i_BFu7c)
//============================================================================


struct  BFu7s_BFu15i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu15i_BFu7i) C1{ Fs:7 Fi:15 Fi:7}



static void Test_BFu7s_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu7i, BFu7s_BFu15i_BFu7i)
//============================================================================


struct  BFu7s_BFu15i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu15i_BFu7ll) C1{ Fs:7 Fi:15 FL:7}



static void Test_BFu7s_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu7ll, BFu7s_BFu15i_BFu7ll)
//============================================================================


struct  BFu7s_BFu15i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu15i_BFu7s) C1{ Fs:7 Fi:15 Fs:7}



static void Test_BFu7s_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu7s, BFu7s_BFu15i_BFu7s)
//============================================================================


struct  BFu7s_BFu15i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu15i_BFu8c) C1{ Fs:7 Fi:15 Fc:8}



static void Test_BFu7s_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu8c, BFu7s_BFu15i_BFu8c)
//============================================================================


struct  BFu7s_BFu15i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu15i_BFu8i) C1{ Fs:7 Fi:15 Fi:8}



static void Test_BFu7s_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu8i, BFu7s_BFu15i_BFu8i)
//============================================================================


struct  BFu7s_BFu15i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu15i_BFu8ll) C1{ Fs:7 Fi:15 FL:8}



static void Test_BFu7s_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu8ll, BFu7s_BFu15i_BFu8ll)
//============================================================================


struct  BFu7s_BFu15i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu15i_BFu8s) C1{ Fs:7 Fi:15 Fs:8}



static void Test_BFu7s_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu8s, BFu7s_BFu15i_BFu8s)
//============================================================================


struct  BFu7s_BFu15i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu15i_BFu9i) C1{ Fs:7 Fi:15 Fi:9}



static void Test_BFu7s_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu9i, BFu7s_BFu15i_BFu9i)
//============================================================================


struct  BFu7s_BFu15i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu15i_BFu9ll) C1{ Fs:7 Fi:15 FL:9}



static void Test_BFu7s_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu9ll, BFu7s_BFu15i_BFu9ll)
//============================================================================


struct  BFu7s_BFu15i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu15i_BFu9s) C1{ Fs:7 Fi:15 Fs:9}



static void Test_BFu7s_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_BFu9s, BFu7s_BFu15i_BFu9s)
//============================================================================


struct  BFu7s_BFu15i_C  {
  unsigned short v1:7;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu7s_BFu15i_C) C1{ Fs:7 Fi:15 Fc}



static void Test_BFu7s_BFu15i_C()
{
  {
    init_simple_test("BFu7s_BFu15i_C");
    static STRUCT_IF_C BFu7s_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_C, BFu7s_BFu15i_C)
//============================================================================


struct  BFu7s_BFu15i_D  {
  unsigned short v1:7;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu7s_BFu15i_D) C1{ Fs:7 Fi:15 FL}



static void Test_BFu7s_BFu15i_D()
{
  {
    init_simple_test("BFu7s_BFu15i_D");
    static STRUCT_IF_C BFu7s_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_D, BFu7s_BFu15i_D)
//============================================================================


struct  BFu7s_BFu15i_F  {
  unsigned short v1:7;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu7s_BFu15i_F) C1{ Fs:7 Fi:15 Fi}



static void Test_BFu7s_BFu15i_F()
{
  {
    init_simple_test("BFu7s_BFu15i_F");
    static STRUCT_IF_C BFu7s_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_F, BFu7s_BFu15i_F)
//============================================================================


struct  BFu7s_BFu15i_I  {
  unsigned short v1:7;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu7s_BFu15i_I) C1{ Fs:7 Fi:15 Fi}



static void Test_BFu7s_BFu15i_I()
{
  {
    init_simple_test("BFu7s_BFu15i_I");
    static STRUCT_IF_C BFu7s_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_I, BFu7s_BFu15i_I)
//============================================================================


struct  BFu7s_BFu15i_Ip  {
  unsigned short v1:7;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu7s_BFu15i_Ip) C1{ Fs:7 Fi:15 Fp}



static void Test_BFu7s_BFu15i_Ip()
{
  {
    init_simple_test("BFu7s_BFu15i_Ip");
    static STRUCT_IF_C BFu7s_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Ip, BFu7s_BFu15i_Ip)
//============================================================================


struct  BFu7s_BFu15i_L  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu15i_L) C1{ Fs:7 Fi:15 FL}



static void Test_BFu7s_BFu15i_L()
{
  {
    init_simple_test("BFu7s_BFu15i_L");
    static STRUCT_IF_C BFu7s_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_L, BFu7s_BFu15i_L)
//============================================================================


struct  BFu7s_BFu15i_S  {
  unsigned short v1:7;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu7s_BFu15i_S) C1{ Fs:7 Fi:15 Fs}



static void Test_BFu7s_BFu15i_S()
{
  {
    init_simple_test("BFu7s_BFu15i_S");
    static STRUCT_IF_C BFu7s_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_S, BFu7s_BFu15i_S)
//============================================================================


struct  BFu7s_BFu15i_Uc  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu15i_Uc) C1{ Fs:7 Fi:15 Fc}



static void Test_BFu7s_BFu15i_Uc()
{
  {
    init_simple_test("BFu7s_BFu15i_Uc");
    static STRUCT_IF_C BFu7s_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Uc, BFu7s_BFu15i_Uc)
//============================================================================


struct  BFu7s_BFu15i_Ui  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu15i_Ui) C1{ Fs:7 Fi:15 Fi}



static void Test_BFu7s_BFu15i_Ui()
{
  {
    init_simple_test("BFu7s_BFu15i_Ui");
    static STRUCT_IF_C BFu7s_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Ui, BFu7s_BFu15i_Ui)
//============================================================================


struct  BFu7s_BFu15i_Ul  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu15i_Ul) C1{ Fs:7 Fi:15 FL}



static void Test_BFu7s_BFu15i_Ul()
{
  {
    init_simple_test("BFu7s_BFu15i_Ul");
    static STRUCT_IF_C BFu7s_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Ul, BFu7s_BFu15i_Ul)
//============================================================================


struct  BFu7s_BFu15i_Us  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu15i_Us) C1{ Fs:7 Fi:15 Fs}



static void Test_BFu7s_BFu15i_Us()
{
  {
    init_simple_test("BFu7s_BFu15i_Us");
    static STRUCT_IF_C BFu7s_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Us, BFu7s_BFu15i_Us)
//============================================================================


struct  BFu7s_BFu15i_Vp  {
  unsigned short v1:7;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu7s_BFu15i_Vp) C1{ Fs:7 Fi:15 Fp}



static void Test_BFu7s_BFu15i_Vp()
{
  {
    init_simple_test("BFu7s_BFu15i_Vp");
    static STRUCT_IF_C BFu7s_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15i_Vp, BFu7s_BFu15i_Vp)
//============================================================================


struct  BFu7s_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu7s_BFu15ll) C1{ Fs:7 FL:15}



static void Test_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll, BFu7s_BFu15ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu15ll_BFu15i) C1{ Fs:7 FL:15 Fi:15}



static void Test_BFu7s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu15i, BFu7s_BFu15ll_BFu15i)
//============================================================================


struct  BFu7s_BFu15ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu15ll_BFu15ll) C1{ Fs:7 FL:15 FL:15}



static void Test_BFu7s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu15ll, BFu7s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu15ll_BFu15s) C1{ Fs:7 FL:15 Fs:15}



static void Test_BFu7s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu15s, BFu7s_BFu15ll_BFu15s)
//============================================================================


struct  BFu7s_BFu15ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu15ll_BFu16i) C1{ Fs:7 FL:15 Fi:16}



static void Test_BFu7s_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu16i, BFu7s_BFu15ll_BFu16i)
//============================================================================


struct  BFu7s_BFu15ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu15ll_BFu16ll) C1{ Fs:7 FL:15 FL:16}



static void Test_BFu7s_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu16ll, BFu7s_BFu15ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu15ll_BFu16s) C1{ Fs:7 FL:15 Fs:16}



static void Test_BFu7s_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu16s, BFu7s_BFu15ll_BFu16s)
//============================================================================


struct  BFu7s_BFu15ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu15ll_BFu17i) C1{ Fs:7 FL:15 Fi:17}



static void Test_BFu7s_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu17i, BFu7s_BFu15ll_BFu17i)
//============================================================================


struct  BFu7s_BFu15ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu15ll_BFu17ll) C1{ Fs:7 FL:15 FL:17}



static void Test_BFu7s_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu17ll, BFu7s_BFu15ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu15ll_BFu1c) C1{ Fs:7 FL:15 Fc:1}



static void Test_BFu7s_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu1c, BFu7s_BFu15ll_BFu1c)
//============================================================================


struct  BFu7s_BFu15ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu15ll_BFu1i) C1{ Fs:7 FL:15 Fi:1}



static void Test_BFu7s_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu1i, BFu7s_BFu15ll_BFu1i)
//============================================================================


struct  BFu7s_BFu15ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu15ll_BFu1ll) C1{ Fs:7 FL:15 FL:1}



static void Test_BFu7s_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu1ll, BFu7s_BFu15ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu15ll_BFu1s) C1{ Fs:7 FL:15 Fs:1}



static void Test_BFu7s_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7s_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu1s, BFu7s_BFu15ll_BFu1s)
//============================================================================


struct  BFu7s_BFu15ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu15ll_BFu31i) C1{ Fs:7 FL:15 Fi:31}



static void Test_BFu7s_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu31i, BFu7s_BFu15ll_BFu31i)
//============================================================================


struct  BFu7s_BFu15ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu15ll_BFu31ll) C1{ Fs:7 FL:15 FL:31}



static void Test_BFu7s_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7s_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu31ll, BFu7s_BFu15ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu15ll_BFu32i) C1{ Fs:7 FL:15 Fi:32}



static void Test_BFu7s_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu32i, BFu7s_BFu15ll_BFu32i)
//============================================================================


struct  BFu7s_BFu15ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu15ll_BFu32ll) C1{ Fs:7 FL:15 FL:32}



static void Test_BFu7s_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7s_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu32ll, BFu7s_BFu15ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu15ll_BFu33) C1{ Fs:7 FL:15 FL:33}



static void Test_BFu7s_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7s_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu33, BFu7s_BFu15ll_BFu33)
//============================================================================


struct  BFu7s_BFu15ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu15ll_BFu7c) C1{ Fs:7 FL:15 Fc:7}



static void Test_BFu7s_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu7c, BFu7s_BFu15ll_BFu7c)
//============================================================================


struct  BFu7s_BFu15ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu15ll_BFu7i) C1{ Fs:7 FL:15 Fi:7}



static void Test_BFu7s_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu7i, BFu7s_BFu15ll_BFu7i)
//============================================================================


struct  BFu7s_BFu15ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu15ll_BFu7ll) C1{ Fs:7 FL:15 FL:7}



static void Test_BFu7s_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu7ll, BFu7s_BFu15ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu15ll_BFu7s) C1{ Fs:7 FL:15 Fs:7}



static void Test_BFu7s_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu7s, BFu7s_BFu15ll_BFu7s)
//============================================================================


struct  BFu7s_BFu15ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu15ll_BFu8c) C1{ Fs:7 FL:15 Fc:8}



static void Test_BFu7s_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu8c, BFu7s_BFu15ll_BFu8c)
//============================================================================


struct  BFu7s_BFu15ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu15ll_BFu8i) C1{ Fs:7 FL:15 Fi:8}



static void Test_BFu7s_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu8i, BFu7s_BFu15ll_BFu8i)
//============================================================================


struct  BFu7s_BFu15ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu15ll_BFu8ll) C1{ Fs:7 FL:15 FL:8}



static void Test_BFu7s_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu8ll, BFu7s_BFu15ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu15ll_BFu8s) C1{ Fs:7 FL:15 Fs:8}



static void Test_BFu7s_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu8s, BFu7s_BFu15ll_BFu8s)
//============================================================================


struct  BFu7s_BFu15ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu15ll_BFu9i) C1{ Fs:7 FL:15 Fi:9}



static void Test_BFu7s_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu9i, BFu7s_BFu15ll_BFu9i)
//============================================================================


struct  BFu7s_BFu15ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu15ll_BFu9ll) C1{ Fs:7 FL:15 FL:9}



static void Test_BFu7s_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu9ll, BFu7s_BFu15ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu15ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu15ll_BFu9s) C1{ Fs:7 FL:15 Fs:9}



static void Test_BFu7s_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_BFu9s, BFu7s_BFu15ll_BFu9s)
//============================================================================


struct  BFu7s_BFu15ll_C  {
  unsigned short v1:7;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu7s_BFu15ll_C) C1{ Fs:7 FL:15 Fc}



static void Test_BFu7s_BFu15ll_C()
{
  {
    init_simple_test("BFu7s_BFu15ll_C");
    static STRUCT_IF_C BFu7s_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_C, BFu7s_BFu15ll_C)
//============================================================================


struct  BFu7s_BFu15ll_D  {
  unsigned short v1:7;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu7s_BFu15ll_D) C1{ Fs:7 FL:15 FL}



static void Test_BFu7s_BFu15ll_D()
{
  {
    init_simple_test("BFu7s_BFu15ll_D");
    static STRUCT_IF_C BFu7s_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_D, BFu7s_BFu15ll_D)
//============================================================================


struct  BFu7s_BFu15ll_F  {
  unsigned short v1:7;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu7s_BFu15ll_F) C1{ Fs:7 FL:15 Fi}



static void Test_BFu7s_BFu15ll_F()
{
  {
    init_simple_test("BFu7s_BFu15ll_F");
    static STRUCT_IF_C BFu7s_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_F, BFu7s_BFu15ll_F)
//============================================================================


struct  BFu7s_BFu15ll_I  {
  unsigned short v1:7;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu7s_BFu15ll_I) C1{ Fs:7 FL:15 Fi}



static void Test_BFu7s_BFu15ll_I()
{
  {
    init_simple_test("BFu7s_BFu15ll_I");
    static STRUCT_IF_C BFu7s_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_I, BFu7s_BFu15ll_I)
//============================================================================


struct  BFu7s_BFu15ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu7s_BFu15ll_Ip) C1{ Fs:7 FL:15 Fp}



static void Test_BFu7s_BFu15ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu15ll_Ip");
    static STRUCT_IF_C BFu7s_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Ip, BFu7s_BFu15ll_Ip)
//============================================================================


struct  BFu7s_BFu15ll_L  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu15ll_L) C1{ Fs:7 FL:15 FL}



static void Test_BFu7s_BFu15ll_L()
{
  {
    init_simple_test("BFu7s_BFu15ll_L");
    static STRUCT_IF_C BFu7s_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_L, BFu7s_BFu15ll_L)
//============================================================================


struct  BFu7s_BFu15ll_S  {
  unsigned short v1:7;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu7s_BFu15ll_S) C1{ Fs:7 FL:15 Fs}



static void Test_BFu7s_BFu15ll_S()
{
  {
    init_simple_test("BFu7s_BFu15ll_S");
    static STRUCT_IF_C BFu7s_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_S, BFu7s_BFu15ll_S)
//============================================================================


struct  BFu7s_BFu15ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu15ll_Uc) C1{ Fs:7 FL:15 Fc}



static void Test_BFu7s_BFu15ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu15ll_Uc");
    static STRUCT_IF_C BFu7s_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Uc, BFu7s_BFu15ll_Uc)
//============================================================================


struct  BFu7s_BFu15ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu15ll_Ui) C1{ Fs:7 FL:15 Fi}



static void Test_BFu7s_BFu15ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu15ll_Ui");
    static STRUCT_IF_C BFu7s_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Ui, BFu7s_BFu15ll_Ui)
//============================================================================


struct  BFu7s_BFu15ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu15ll_Ul) C1{ Fs:7 FL:15 FL}



static void Test_BFu7s_BFu15ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu15ll_Ul");
    static STRUCT_IF_C BFu7s_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Ul, BFu7s_BFu15ll_Ul)
//============================================================================


struct  BFu7s_BFu15ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu15ll_Us) C1{ Fs:7 FL:15 Fs}



static void Test_BFu7s_BFu15ll_Us()
{
  {
    init_simple_test("BFu7s_BFu15ll_Us");
    static STRUCT_IF_C BFu7s_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Us, BFu7s_BFu15ll_Us)
//============================================================================


struct  BFu7s_BFu15ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu7s_BFu15ll_Vp) C1{ Fs:7 FL:15 Fp}



static void Test_BFu7s_BFu15ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu15ll_Vp");
    static STRUCT_IF_C BFu7s_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15ll_Vp, BFu7s_BFu15ll_Vp)
//============================================================================


struct  BFu7s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu7s_BFu15s) C1{ Fs:7 Fs:15}



static void Test_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s, BFu7s_BFu15s)
//============================================================================


struct  BFu7s_BFu15s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu15s_BFu15i) C1{ Fs:7 Fs:15 Fi:15}



static void Test_BFu7s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu15i, BFu7s_BFu15s_BFu15i)
//============================================================================


struct  BFu7s_BFu15s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu15s_BFu15ll) C1{ Fs:7 Fs:15 FL:15}



static void Test_BFu7s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu7s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu15ll, BFu7s_BFu15s_BFu15ll)
//============================================================================


struct  BFu7s_BFu15s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu15s_BFu15s) C1{ Fs:7 Fs:15 Fs:15}



static void Test_BFu7s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu15s, BFu7s_BFu15s_BFu15s)
//============================================================================


struct  BFu7s_BFu15s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu15s_BFu16i) C1{ Fs:7 Fs:15 Fi:16}



static void Test_BFu7s_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu16i, BFu7s_BFu15s_BFu16i)
//============================================================================


struct  BFu7s_BFu15s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu15s_BFu16ll) C1{ Fs:7 Fs:15 FL:16}



static void Test_BFu7s_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu7s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu16ll, BFu7s_BFu15s_BFu16ll)
//============================================================================


struct  BFu7s_BFu15s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu15s_BFu16s) C1{ Fs:7 Fs:15 Fs:16}



static void Test_BFu7s_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu16s, BFu7s_BFu15s_BFu16s)
//============================================================================


struct  BFu7s_BFu15s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu15s_BFu17i) C1{ Fs:7 Fs:15 Fi:17}



static void Test_BFu7s_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu17i, BFu7s_BFu15s_BFu17i)
//============================================================================


struct  BFu7s_BFu15s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu15s_BFu17ll) C1{ Fs:7 Fs:15 FL:17}



static void Test_BFu7s_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu7s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu17ll, BFu7s_BFu15s_BFu17ll)
//============================================================================


struct  BFu7s_BFu15s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu15s_BFu1c) C1{ Fs:7 Fs:15 Fc:1}



static void Test_BFu7s_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7s_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu1c, BFu7s_BFu15s_BFu1c)
//============================================================================


struct  BFu7s_BFu15s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu15s_BFu1i) C1{ Fs:7 Fs:15 Fi:1}



static void Test_BFu7s_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7s_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu1i, BFu7s_BFu15s_BFu1i)
//============================================================================


struct  BFu7s_BFu15s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu15s_BFu1ll) C1{ Fs:7 Fs:15 FL:1}



static void Test_BFu7s_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7s_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu1ll, BFu7s_BFu15s_BFu1ll)
//============================================================================


struct  BFu7s_BFu15s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu15s_BFu1s) C1{ Fs:7 Fs:15 Fs:1}



static void Test_BFu7s_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7s_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu1s, BFu7s_BFu15s_BFu1s)
//============================================================================


struct  BFu7s_BFu15s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu15s_BFu31i) C1{ Fs:7 Fs:15 Fi:31}



static void Test_BFu7s_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu31i, BFu7s_BFu15s_BFu31i)
//============================================================================


struct  BFu7s_BFu15s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu15s_BFu31ll) C1{ Fs:7 Fs:15 FL:31}



static void Test_BFu7s_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu7s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu31ll, BFu7s_BFu15s_BFu31ll)
//============================================================================


struct  BFu7s_BFu15s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu15s_BFu32i) C1{ Fs:7 Fs:15 Fi:32}



static void Test_BFu7s_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu32i, BFu7s_BFu15s_BFu32i)
//============================================================================


struct  BFu7s_BFu15s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu15s_BFu32ll) C1{ Fs:7 Fs:15 FL:32}



static void Test_BFu7s_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu7s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu32ll, BFu7s_BFu15s_BFu32ll)
//============================================================================


struct  BFu7s_BFu15s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu15s_BFu33) C1{ Fs:7 Fs:15 FL:33}



static void Test_BFu7s_BFu15s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu33");
    static STRUCT_IF_C BFu7s_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu7s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu33, BFu7s_BFu15s_BFu33)
//============================================================================


struct  BFu7s_BFu15s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu15s_BFu7c) C1{ Fs:7 Fs:15 Fc:7}



static void Test_BFu7s_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu7c, BFu7s_BFu15s_BFu7c)
//============================================================================


struct  BFu7s_BFu15s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu15s_BFu7i) C1{ Fs:7 Fs:15 Fi:7}



static void Test_BFu7s_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu7i, BFu7s_BFu15s_BFu7i)
//============================================================================


struct  BFu7s_BFu15s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu15s_BFu7ll) C1{ Fs:7 Fs:15 FL:7}



static void Test_BFu7s_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu7s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu7ll, BFu7s_BFu15s_BFu7ll)
//============================================================================


struct  BFu7s_BFu15s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu15s_BFu7s) C1{ Fs:7 Fs:15 Fs:7}



static void Test_BFu7s_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu7s, BFu7s_BFu15s_BFu7s)
//============================================================================


struct  BFu7s_BFu15s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu15s_BFu8c) C1{ Fs:7 Fs:15 Fc:8}



static void Test_BFu7s_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu8c, BFu7s_BFu15s_BFu8c)
//============================================================================


struct  BFu7s_BFu15s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu15s_BFu8i) C1{ Fs:7 Fs:15 Fi:8}



static void Test_BFu7s_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu8i, BFu7s_BFu15s_BFu8i)
//============================================================================


struct  BFu7s_BFu15s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu15s_BFu8ll) C1{ Fs:7 Fs:15 FL:8}



static void Test_BFu7s_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu7s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu8ll, BFu7s_BFu15s_BFu8ll)
//============================================================================


struct  BFu7s_BFu15s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu15s_BFu8s) C1{ Fs:7 Fs:15 Fs:8}



static void Test_BFu7s_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu8s, BFu7s_BFu15s_BFu8s)
//============================================================================


struct  BFu7s_BFu15s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu15s_BFu9i) C1{ Fs:7 Fs:15 Fi:9}



static void Test_BFu7s_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu9i, BFu7s_BFu15s_BFu9i)
//============================================================================


struct  BFu7s_BFu15s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu15s_BFu9ll) C1{ Fs:7 Fs:15 FL:9}



static void Test_BFu7s_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu7s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu9ll, BFu7s_BFu15s_BFu9ll)
//============================================================================


struct  BFu7s_BFu15s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu15s_BFu9s) C1{ Fs:7 Fs:15 Fs:9}



static void Test_BFu7s_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_BFu9s, BFu7s_BFu15s_BFu9s)
//============================================================================


struct  BFu7s_BFu15s_C  {
  unsigned short v1:7;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu7s_BFu15s_C) C1{ Fs:7 Fs:15 Fc}



static void Test_BFu7s_BFu15s_C()
{
  {
    init_simple_test("BFu7s_BFu15s_C");
    static STRUCT_IF_C BFu7s_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_C, BFu7s_BFu15s_C)
//============================================================================


struct  BFu7s_BFu15s_D  {
  unsigned short v1:7;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu7s_BFu15s_D) C1{ Fs:7 Fs:15 FL}



static void Test_BFu7s_BFu15s_D()
{
  {
    init_simple_test("BFu7s_BFu15s_D");
    static STRUCT_IF_C BFu7s_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_D, BFu7s_BFu15s_D)
//============================================================================


struct  BFu7s_BFu15s_F  {
  unsigned short v1:7;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu7s_BFu15s_F) C1{ Fs:7 Fs:15 Fi}



static void Test_BFu7s_BFu15s_F()
{
  {
    init_simple_test("BFu7s_BFu15s_F");
    static STRUCT_IF_C BFu7s_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_F, BFu7s_BFu15s_F)
//============================================================================


struct  BFu7s_BFu15s_I  {
  unsigned short v1:7;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu7s_BFu15s_I) C1{ Fs:7 Fs:15 Fi}



static void Test_BFu7s_BFu15s_I()
{
  {
    init_simple_test("BFu7s_BFu15s_I");
    static STRUCT_IF_C BFu7s_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_I, BFu7s_BFu15s_I)
//============================================================================


struct  BFu7s_BFu15s_Ip  {
  unsigned short v1:7;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu7s_BFu15s_Ip) C1{ Fs:7 Fs:15 Fp}



static void Test_BFu7s_BFu15s_Ip()
{
  {
    init_simple_test("BFu7s_BFu15s_Ip");
    static STRUCT_IF_C BFu7s_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Ip, BFu7s_BFu15s_Ip)
//============================================================================


struct  BFu7s_BFu15s_L  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu15s_L) C1{ Fs:7 Fs:15 FL}



static void Test_BFu7s_BFu15s_L()
{
  {
    init_simple_test("BFu7s_BFu15s_L");
    static STRUCT_IF_C BFu7s_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_L, BFu7s_BFu15s_L)
//============================================================================


struct  BFu7s_BFu15s_S  {
  unsigned short v1:7;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu7s_BFu15s_S) C1{ Fs:7 Fs:15 Fs}



static void Test_BFu7s_BFu15s_S()
{
  {
    init_simple_test("BFu7s_BFu15s_S");
    static STRUCT_IF_C BFu7s_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_S, BFu7s_BFu15s_S)
//============================================================================


struct  BFu7s_BFu15s_Uc  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu15s_Uc) C1{ Fs:7 Fs:15 Fc}



static void Test_BFu7s_BFu15s_Uc()
{
  {
    init_simple_test("BFu7s_BFu15s_Uc");
    static STRUCT_IF_C BFu7s_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Uc, BFu7s_BFu15s_Uc)
//============================================================================


struct  BFu7s_BFu15s_Ui  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu15s_Ui) C1{ Fs:7 Fs:15 Fi}



static void Test_BFu7s_BFu15s_Ui()
{
  {
    init_simple_test("BFu7s_BFu15s_Ui");
    static STRUCT_IF_C BFu7s_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Ui, BFu7s_BFu15s_Ui)
//============================================================================


struct  BFu7s_BFu15s_Ul  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu15s_Ul) C1{ Fs:7 Fs:15 FL}



static void Test_BFu7s_BFu15s_Ul()
{
  {
    init_simple_test("BFu7s_BFu15s_Ul");
    static STRUCT_IF_C BFu7s_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Ul, BFu7s_BFu15s_Ul)
//============================================================================


struct  BFu7s_BFu15s_Us  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu15s_Us) C1{ Fs:7 Fs:15 Fs}



static void Test_BFu7s_BFu15s_Us()
{
  {
    init_simple_test("BFu7s_BFu15s_Us");
    static STRUCT_IF_C BFu7s_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Us, BFu7s_BFu15s_Us)
//============================================================================


struct  BFu7s_BFu15s_Vp  {
  unsigned short v1:7;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu7s_BFu15s_Vp) C1{ Fs:7 Fs:15 Fp}



static void Test_BFu7s_BFu15s_Vp()
{
  {
    init_simple_test("BFu7s_BFu15s_Vp");
    static STRUCT_IF_C BFu7s_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu15s_Vp, BFu7s_BFu15s_Vp)
//============================================================================


struct  BFu7s_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu7s_BFu16i) C1{ Fs:7 Fi:16}



static void Test_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i, BFu7s_BFu16i)
//============================================================================


struct  BFu7s_BFu16i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu16i_BFu15i) C1{ Fs:7 Fi:16 Fi:15}



static void Test_BFu7s_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu15i, BFu7s_BFu16i_BFu15i)
//============================================================================


struct  BFu7s_BFu16i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu16i_BFu15ll) C1{ Fs:7 Fi:16 FL:15}



static void Test_BFu7s_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu15ll, BFu7s_BFu16i_BFu15ll)
//============================================================================


struct  BFu7s_BFu16i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu16i_BFu15s) C1{ Fs:7 Fi:16 Fs:15}



static void Test_BFu7s_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu15s, BFu7s_BFu16i_BFu15s)
//============================================================================


struct  BFu7s_BFu16i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu16i_BFu16i) C1{ Fs:7 Fi:16 Fi:16}



static void Test_BFu7s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu16i, BFu7s_BFu16i_BFu16i)
//============================================================================


struct  BFu7s_BFu16i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu16i_BFu16ll) C1{ Fs:7 Fi:16 FL:16}



static void Test_BFu7s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu16ll, BFu7s_BFu16i_BFu16ll)
//============================================================================


struct  BFu7s_BFu16i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu16i_BFu16s) C1{ Fs:7 Fi:16 Fs:16}



static void Test_BFu7s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu16s, BFu7s_BFu16i_BFu16s)
//============================================================================


struct  BFu7s_BFu16i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu16i_BFu17i) C1{ Fs:7 Fi:16 Fi:17}



static void Test_BFu7s_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu17i, BFu7s_BFu16i_BFu17i)
//============================================================================


struct  BFu7s_BFu16i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu16i_BFu17ll) C1{ Fs:7 Fi:16 FL:17}



static void Test_BFu7s_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu17ll, BFu7s_BFu16i_BFu17ll)
//============================================================================


struct  BFu7s_BFu16i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu16i_BFu1c) C1{ Fs:7 Fi:16 Fc:1}



static void Test_BFu7s_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu1c, BFu7s_BFu16i_BFu1c)
//============================================================================


struct  BFu7s_BFu16i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu16i_BFu1i) C1{ Fs:7 Fi:16 Fi:1}



static void Test_BFu7s_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu1i, BFu7s_BFu16i_BFu1i)
//============================================================================


struct  BFu7s_BFu16i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu16i_BFu1ll) C1{ Fs:7 Fi:16 FL:1}



static void Test_BFu7s_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu1ll, BFu7s_BFu16i_BFu1ll)
//============================================================================


struct  BFu7s_BFu16i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu16i_BFu1s) C1{ Fs:7 Fi:16 Fs:1}



static void Test_BFu7s_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu1s, BFu7s_BFu16i_BFu1s)
//============================================================================


struct  BFu7s_BFu16i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu16i_BFu31i) C1{ Fs:7 Fi:16 Fi:31}



static void Test_BFu7s_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu31i, BFu7s_BFu16i_BFu31i)
//============================================================================


struct  BFu7s_BFu16i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu16i_BFu31ll) C1{ Fs:7 Fi:16 FL:31}



static void Test_BFu7s_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu31ll, BFu7s_BFu16i_BFu31ll)
//============================================================================


struct  BFu7s_BFu16i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu16i_BFu32i) C1{ Fs:7 Fi:16 Fi:32}



static void Test_BFu7s_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu32i, BFu7s_BFu16i_BFu32i)
//============================================================================


struct  BFu7s_BFu16i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu16i_BFu32ll) C1{ Fs:7 Fi:16 FL:32}



static void Test_BFu7s_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu32ll, BFu7s_BFu16i_BFu32ll)
//============================================================================


struct  BFu7s_BFu16i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu16i_BFu33) C1{ Fs:7 Fi:16 FL:33}



static void Test_BFu7s_BFu16i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu33");
    static STRUCT_IF_C BFu7s_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu33, BFu7s_BFu16i_BFu33)
//============================================================================


struct  BFu7s_BFu16i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu16i_BFu7c) C1{ Fs:7 Fi:16 Fc:7}



static void Test_BFu7s_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu7c, BFu7s_BFu16i_BFu7c)
//============================================================================


struct  BFu7s_BFu16i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu16i_BFu7i) C1{ Fs:7 Fi:16 Fi:7}



static void Test_BFu7s_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu7i, BFu7s_BFu16i_BFu7i)
//============================================================================


struct  BFu7s_BFu16i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu16i_BFu7ll) C1{ Fs:7 Fi:16 FL:7}



static void Test_BFu7s_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu7ll, BFu7s_BFu16i_BFu7ll)
//============================================================================


struct  BFu7s_BFu16i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu16i_BFu7s) C1{ Fs:7 Fi:16 Fs:7}



static void Test_BFu7s_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu7s, BFu7s_BFu16i_BFu7s)
//============================================================================


struct  BFu7s_BFu16i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu16i_BFu8c) C1{ Fs:7 Fi:16 Fc:8}



static void Test_BFu7s_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu8c, BFu7s_BFu16i_BFu8c)
//============================================================================


struct  BFu7s_BFu16i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu16i_BFu8i) C1{ Fs:7 Fi:16 Fi:8}



static void Test_BFu7s_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu8i, BFu7s_BFu16i_BFu8i)
//============================================================================


struct  BFu7s_BFu16i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu16i_BFu8ll) C1{ Fs:7 Fi:16 FL:8}



static void Test_BFu7s_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu8ll, BFu7s_BFu16i_BFu8ll)
//============================================================================


struct  BFu7s_BFu16i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu16i_BFu8s) C1{ Fs:7 Fi:16 Fs:8}



static void Test_BFu7s_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu8s, BFu7s_BFu16i_BFu8s)
//============================================================================


struct  BFu7s_BFu16i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu16i_BFu9i) C1{ Fs:7 Fi:16 Fi:9}



static void Test_BFu7s_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu9i, BFu7s_BFu16i_BFu9i)
//============================================================================


struct  BFu7s_BFu16i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu16i_BFu9ll) C1{ Fs:7 Fi:16 FL:9}



static void Test_BFu7s_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu9ll, BFu7s_BFu16i_BFu9ll)
//============================================================================


struct  BFu7s_BFu16i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu16i_BFu9s) C1{ Fs:7 Fi:16 Fs:9}



static void Test_BFu7s_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_BFu9s, BFu7s_BFu16i_BFu9s)
//============================================================================


struct  BFu7s_BFu16i_C  {
  unsigned short v1:7;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu7s_BFu16i_C) C1{ Fs:7 Fi:16 Fc}



static void Test_BFu7s_BFu16i_C()
{
  {
    init_simple_test("BFu7s_BFu16i_C");
    static STRUCT_IF_C BFu7s_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_C, BFu7s_BFu16i_C)
//============================================================================


struct  BFu7s_BFu16i_D  {
  unsigned short v1:7;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu7s_BFu16i_D) C1{ Fs:7 Fi:16 FL}



static void Test_BFu7s_BFu16i_D()
{
  {
    init_simple_test("BFu7s_BFu16i_D");
    static STRUCT_IF_C BFu7s_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_D, BFu7s_BFu16i_D)
//============================================================================


struct  BFu7s_BFu16i_F  {
  unsigned short v1:7;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu7s_BFu16i_F) C1{ Fs:7 Fi:16 Fi}



static void Test_BFu7s_BFu16i_F()
{
  {
    init_simple_test("BFu7s_BFu16i_F");
    static STRUCT_IF_C BFu7s_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_F, BFu7s_BFu16i_F)
//============================================================================


struct  BFu7s_BFu16i_I  {
  unsigned short v1:7;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu7s_BFu16i_I) C1{ Fs:7 Fi:16 Fi}



static void Test_BFu7s_BFu16i_I()
{
  {
    init_simple_test("BFu7s_BFu16i_I");
    static STRUCT_IF_C BFu7s_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_I, BFu7s_BFu16i_I)
//============================================================================


struct  BFu7s_BFu16i_Ip  {
  unsigned short v1:7;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu7s_BFu16i_Ip) C1{ Fs:7 Fi:16 Fp}



static void Test_BFu7s_BFu16i_Ip()
{
  {
    init_simple_test("BFu7s_BFu16i_Ip");
    static STRUCT_IF_C BFu7s_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Ip, BFu7s_BFu16i_Ip)
//============================================================================


struct  BFu7s_BFu16i_L  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu16i_L) C1{ Fs:7 Fi:16 FL}



static void Test_BFu7s_BFu16i_L()
{
  {
    init_simple_test("BFu7s_BFu16i_L");
    static STRUCT_IF_C BFu7s_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_L, BFu7s_BFu16i_L)
//============================================================================


struct  BFu7s_BFu16i_S  {
  unsigned short v1:7;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu7s_BFu16i_S) C1{ Fs:7 Fi:16 Fs}



static void Test_BFu7s_BFu16i_S()
{
  {
    init_simple_test("BFu7s_BFu16i_S");
    static STRUCT_IF_C BFu7s_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_S, BFu7s_BFu16i_S)
//============================================================================


struct  BFu7s_BFu16i_Uc  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu16i_Uc) C1{ Fs:7 Fi:16 Fc}



static void Test_BFu7s_BFu16i_Uc()
{
  {
    init_simple_test("BFu7s_BFu16i_Uc");
    static STRUCT_IF_C BFu7s_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Uc, BFu7s_BFu16i_Uc)
//============================================================================


struct  BFu7s_BFu16i_Ui  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu16i_Ui) C1{ Fs:7 Fi:16 Fi}



static void Test_BFu7s_BFu16i_Ui()
{
  {
    init_simple_test("BFu7s_BFu16i_Ui");
    static STRUCT_IF_C BFu7s_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Ui, BFu7s_BFu16i_Ui)
//============================================================================


struct  BFu7s_BFu16i_Ul  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu16i_Ul) C1{ Fs:7 Fi:16 FL}



static void Test_BFu7s_BFu16i_Ul()
{
  {
    init_simple_test("BFu7s_BFu16i_Ul");
    static STRUCT_IF_C BFu7s_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Ul, BFu7s_BFu16i_Ul)
//============================================================================


struct  BFu7s_BFu16i_Us  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu16i_Us) C1{ Fs:7 Fi:16 Fs}



static void Test_BFu7s_BFu16i_Us()
{
  {
    init_simple_test("BFu7s_BFu16i_Us");
    static STRUCT_IF_C BFu7s_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Us, BFu7s_BFu16i_Us)
//============================================================================


struct  BFu7s_BFu16i_Vp  {
  unsigned short v1:7;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu7s_BFu16i_Vp) C1{ Fs:7 Fi:16 Fp}



static void Test_BFu7s_BFu16i_Vp()
{
  {
    init_simple_test("BFu7s_BFu16i_Vp");
    static STRUCT_IF_C BFu7s_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16i_Vp, BFu7s_BFu16i_Vp)
//============================================================================


struct  BFu7s_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu7s_BFu16ll) C1{ Fs:7 FL:16}



static void Test_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll, BFu7s_BFu16ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu16ll_BFu15i) C1{ Fs:7 FL:16 Fi:15}



static void Test_BFu7s_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu15i, BFu7s_BFu16ll_BFu15i)
//============================================================================


struct  BFu7s_BFu16ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu16ll_BFu15ll) C1{ Fs:7 FL:16 FL:15}



static void Test_BFu7s_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu15ll, BFu7s_BFu16ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu16ll_BFu15s) C1{ Fs:7 FL:16 Fs:15}



static void Test_BFu7s_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu15s, BFu7s_BFu16ll_BFu15s)
//============================================================================


struct  BFu7s_BFu16ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu16ll_BFu16i) C1{ Fs:7 FL:16 Fi:16}



static void Test_BFu7s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu16i, BFu7s_BFu16ll_BFu16i)
//============================================================================


struct  BFu7s_BFu16ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu16ll_BFu16ll) C1{ Fs:7 FL:16 FL:16}



static void Test_BFu7s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu16ll, BFu7s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu16ll_BFu16s) C1{ Fs:7 FL:16 Fs:16}



static void Test_BFu7s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu16s, BFu7s_BFu16ll_BFu16s)
//============================================================================


struct  BFu7s_BFu16ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu16ll_BFu17i) C1{ Fs:7 FL:16 Fi:17}



static void Test_BFu7s_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu17i, BFu7s_BFu16ll_BFu17i)
//============================================================================


struct  BFu7s_BFu16ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu16ll_BFu17ll) C1{ Fs:7 FL:16 FL:17}



static void Test_BFu7s_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu17ll, BFu7s_BFu16ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu16ll_BFu1c) C1{ Fs:7 FL:16 Fc:1}



static void Test_BFu7s_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu1c, BFu7s_BFu16ll_BFu1c)
//============================================================================


struct  BFu7s_BFu16ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu16ll_BFu1i) C1{ Fs:7 FL:16 Fi:1}



static void Test_BFu7s_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu1i, BFu7s_BFu16ll_BFu1i)
//============================================================================


struct  BFu7s_BFu16ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu16ll_BFu1ll) C1{ Fs:7 FL:16 FL:1}



static void Test_BFu7s_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu1ll, BFu7s_BFu16ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu16ll_BFu1s) C1{ Fs:7 FL:16 Fs:1}



static void Test_BFu7s_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7s_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu1s, BFu7s_BFu16ll_BFu1s)
//============================================================================


struct  BFu7s_BFu16ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu16ll_BFu31i) C1{ Fs:7 FL:16 Fi:31}



static void Test_BFu7s_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu31i, BFu7s_BFu16ll_BFu31i)
//============================================================================


struct  BFu7s_BFu16ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu16ll_BFu31ll) C1{ Fs:7 FL:16 FL:31}



static void Test_BFu7s_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu31ll, BFu7s_BFu16ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu16ll_BFu32i) C1{ Fs:7 FL:16 Fi:32}



static void Test_BFu7s_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu32i, BFu7s_BFu16ll_BFu32i)
//============================================================================


struct  BFu7s_BFu16ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu16ll_BFu32ll) C1{ Fs:7 FL:16 FL:32}



static void Test_BFu7s_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu32ll, BFu7s_BFu16ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu16ll_BFu33) C1{ Fs:7 FL:16 FL:33}



static void Test_BFu7s_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu33, BFu7s_BFu16ll_BFu33)
//============================================================================


struct  BFu7s_BFu16ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu16ll_BFu7c) C1{ Fs:7 FL:16 Fc:7}



static void Test_BFu7s_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu7c, BFu7s_BFu16ll_BFu7c)
//============================================================================


struct  BFu7s_BFu16ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu16ll_BFu7i) C1{ Fs:7 FL:16 Fi:7}



static void Test_BFu7s_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu7i, BFu7s_BFu16ll_BFu7i)
//============================================================================


struct  BFu7s_BFu16ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu16ll_BFu7ll) C1{ Fs:7 FL:16 FL:7}



static void Test_BFu7s_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu7ll, BFu7s_BFu16ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu16ll_BFu7s) C1{ Fs:7 FL:16 Fs:7}



static void Test_BFu7s_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu7s, BFu7s_BFu16ll_BFu7s)
//============================================================================


struct  BFu7s_BFu16ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu16ll_BFu8c) C1{ Fs:7 FL:16 Fc:8}



static void Test_BFu7s_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu8c, BFu7s_BFu16ll_BFu8c)
//============================================================================


struct  BFu7s_BFu16ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu16ll_BFu8i) C1{ Fs:7 FL:16 Fi:8}



static void Test_BFu7s_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu8i, BFu7s_BFu16ll_BFu8i)
//============================================================================


struct  BFu7s_BFu16ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu16ll_BFu8ll) C1{ Fs:7 FL:16 FL:8}



static void Test_BFu7s_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu8ll, BFu7s_BFu16ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu16ll_BFu8s) C1{ Fs:7 FL:16 Fs:8}



static void Test_BFu7s_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu8s, BFu7s_BFu16ll_BFu8s)
//============================================================================


struct  BFu7s_BFu16ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu16ll_BFu9i) C1{ Fs:7 FL:16 Fi:9}



static void Test_BFu7s_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu9i, BFu7s_BFu16ll_BFu9i)
//============================================================================


struct  BFu7s_BFu16ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu16ll_BFu9ll) C1{ Fs:7 FL:16 FL:9}



static void Test_BFu7s_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu9ll, BFu7s_BFu16ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu16ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu16ll_BFu9s) C1{ Fs:7 FL:16 Fs:9}



static void Test_BFu7s_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_BFu9s, BFu7s_BFu16ll_BFu9s)
//============================================================================


struct  BFu7s_BFu16ll_C  {
  unsigned short v1:7;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu7s_BFu16ll_C) C1{ Fs:7 FL:16 Fc}



static void Test_BFu7s_BFu16ll_C()
{
  {
    init_simple_test("BFu7s_BFu16ll_C");
    static STRUCT_IF_C BFu7s_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_C, BFu7s_BFu16ll_C)
//============================================================================


struct  BFu7s_BFu16ll_D  {
  unsigned short v1:7;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu7s_BFu16ll_D) C1{ Fs:7 FL:16 FL}



static void Test_BFu7s_BFu16ll_D()
{
  {
    init_simple_test("BFu7s_BFu16ll_D");
    static STRUCT_IF_C BFu7s_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_D, BFu7s_BFu16ll_D)
//============================================================================


struct  BFu7s_BFu16ll_F  {
  unsigned short v1:7;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu7s_BFu16ll_F) C1{ Fs:7 FL:16 Fi}



static void Test_BFu7s_BFu16ll_F()
{
  {
    init_simple_test("BFu7s_BFu16ll_F");
    static STRUCT_IF_C BFu7s_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_F, BFu7s_BFu16ll_F)
//============================================================================


struct  BFu7s_BFu16ll_I  {
  unsigned short v1:7;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu7s_BFu16ll_I) C1{ Fs:7 FL:16 Fi}



static void Test_BFu7s_BFu16ll_I()
{
  {
    init_simple_test("BFu7s_BFu16ll_I");
    static STRUCT_IF_C BFu7s_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_I, BFu7s_BFu16ll_I)
//============================================================================


struct  BFu7s_BFu16ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu7s_BFu16ll_Ip) C1{ Fs:7 FL:16 Fp}



static void Test_BFu7s_BFu16ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu16ll_Ip");
    static STRUCT_IF_C BFu7s_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Ip, BFu7s_BFu16ll_Ip)
//============================================================================


struct  BFu7s_BFu16ll_L  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu16ll_L) C1{ Fs:7 FL:16 FL}



static void Test_BFu7s_BFu16ll_L()
{
  {
    init_simple_test("BFu7s_BFu16ll_L");
    static STRUCT_IF_C BFu7s_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_L, BFu7s_BFu16ll_L)
//============================================================================


struct  BFu7s_BFu16ll_S  {
  unsigned short v1:7;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu7s_BFu16ll_S) C1{ Fs:7 FL:16 Fs}



static void Test_BFu7s_BFu16ll_S()
{
  {
    init_simple_test("BFu7s_BFu16ll_S");
    static STRUCT_IF_C BFu7s_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_S, BFu7s_BFu16ll_S)
//============================================================================


struct  BFu7s_BFu16ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu16ll_Uc) C1{ Fs:7 FL:16 Fc}



static void Test_BFu7s_BFu16ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu16ll_Uc");
    static STRUCT_IF_C BFu7s_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Uc, BFu7s_BFu16ll_Uc)
//============================================================================


struct  BFu7s_BFu16ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu16ll_Ui) C1{ Fs:7 FL:16 Fi}



static void Test_BFu7s_BFu16ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu16ll_Ui");
    static STRUCT_IF_C BFu7s_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Ui, BFu7s_BFu16ll_Ui)
//============================================================================


struct  BFu7s_BFu16ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu16ll_Ul) C1{ Fs:7 FL:16 FL}



static void Test_BFu7s_BFu16ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu16ll_Ul");
    static STRUCT_IF_C BFu7s_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Ul, BFu7s_BFu16ll_Ul)
//============================================================================


struct  BFu7s_BFu16ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu16ll_Us) C1{ Fs:7 FL:16 Fs}



static void Test_BFu7s_BFu16ll_Us()
{
  {
    init_simple_test("BFu7s_BFu16ll_Us");
    static STRUCT_IF_C BFu7s_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Us, BFu7s_BFu16ll_Us)
//============================================================================


struct  BFu7s_BFu16ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu7s_BFu16ll_Vp) C1{ Fs:7 FL:16 Fp}



static void Test_BFu7s_BFu16ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu16ll_Vp");
    static STRUCT_IF_C BFu7s_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16ll_Vp, BFu7s_BFu16ll_Vp)
//============================================================================


struct  BFu7s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu7s_BFu16s) C1{ Fs:7 Fs:16}



static void Test_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s, BFu7s_BFu16s)
//============================================================================


struct  BFu7s_BFu16s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu16s_BFu15i) C1{ Fs:7 Fs:16 Fi:15}



static void Test_BFu7s_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu15i, BFu7s_BFu16s_BFu15i)
//============================================================================


struct  BFu7s_BFu16s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu16s_BFu15ll) C1{ Fs:7 Fs:16 FL:15}



static void Test_BFu7s_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu15ll, BFu7s_BFu16s_BFu15ll)
//============================================================================


struct  BFu7s_BFu16s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu16s_BFu15s) C1{ Fs:7 Fs:16 Fs:15}



static void Test_BFu7s_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu15s, BFu7s_BFu16s_BFu15s)
//============================================================================


struct  BFu7s_BFu16s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu16s_BFu16i) C1{ Fs:7 Fs:16 Fi:16}



static void Test_BFu7s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu16i, BFu7s_BFu16s_BFu16i)
//============================================================================


struct  BFu7s_BFu16s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu16s_BFu16ll) C1{ Fs:7 Fs:16 FL:16}



static void Test_BFu7s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu16ll, BFu7s_BFu16s_BFu16ll)
//============================================================================


struct  BFu7s_BFu16s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu16s_BFu16s) C1{ Fs:7 Fs:16 Fs:16}



static void Test_BFu7s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu16s, BFu7s_BFu16s_BFu16s)
//============================================================================


struct  BFu7s_BFu16s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu16s_BFu17i) C1{ Fs:7 Fs:16 Fi:17}



static void Test_BFu7s_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu17i, BFu7s_BFu16s_BFu17i)
//============================================================================


struct  BFu7s_BFu16s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu16s_BFu17ll) C1{ Fs:7 Fs:16 FL:17}



static void Test_BFu7s_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu17ll, BFu7s_BFu16s_BFu17ll)
//============================================================================


struct  BFu7s_BFu16s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu16s_BFu1c) C1{ Fs:7 Fs:16 Fc:1}



static void Test_BFu7s_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu1c, BFu7s_BFu16s_BFu1c)
//============================================================================


struct  BFu7s_BFu16s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu16s_BFu1i) C1{ Fs:7 Fs:16 Fi:1}



static void Test_BFu7s_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu1i, BFu7s_BFu16s_BFu1i)
//============================================================================


struct  BFu7s_BFu16s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu16s_BFu1ll) C1{ Fs:7 Fs:16 FL:1}



static void Test_BFu7s_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu1ll, BFu7s_BFu16s_BFu1ll)
//============================================================================


struct  BFu7s_BFu16s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu16s_BFu1s) C1{ Fs:7 Fs:16 Fs:1}



static void Test_BFu7s_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu1s, BFu7s_BFu16s_BFu1s)
//============================================================================


struct  BFu7s_BFu16s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu16s_BFu31i) C1{ Fs:7 Fs:16 Fi:31}



static void Test_BFu7s_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu31i, BFu7s_BFu16s_BFu31i)
//============================================================================


struct  BFu7s_BFu16s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu16s_BFu31ll) C1{ Fs:7 Fs:16 FL:31}



static void Test_BFu7s_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu31ll, BFu7s_BFu16s_BFu31ll)
//============================================================================


struct  BFu7s_BFu16s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu16s_BFu32i) C1{ Fs:7 Fs:16 Fi:32}



static void Test_BFu7s_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu32i, BFu7s_BFu16s_BFu32i)
//============================================================================


struct  BFu7s_BFu16s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu16s_BFu32ll) C1{ Fs:7 Fs:16 FL:32}



static void Test_BFu7s_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu32ll, BFu7s_BFu16s_BFu32ll)
//============================================================================


struct  BFu7s_BFu16s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu16s_BFu33) C1{ Fs:7 Fs:16 FL:33}



static void Test_BFu7s_BFu16s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu33");
    static STRUCT_IF_C BFu7s_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7s_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu33, BFu7s_BFu16s_BFu33)
//============================================================================


struct  BFu7s_BFu16s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu16s_BFu7c) C1{ Fs:7 Fs:16 Fc:7}



static void Test_BFu7s_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu7c, BFu7s_BFu16s_BFu7c)
//============================================================================


struct  BFu7s_BFu16s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu16s_BFu7i) C1{ Fs:7 Fs:16 Fi:7}



static void Test_BFu7s_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu7i, BFu7s_BFu16s_BFu7i)
//============================================================================


struct  BFu7s_BFu16s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu16s_BFu7ll) C1{ Fs:7 Fs:16 FL:7}



static void Test_BFu7s_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu7ll, BFu7s_BFu16s_BFu7ll)
//============================================================================


struct  BFu7s_BFu16s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu16s_BFu7s) C1{ Fs:7 Fs:16 Fs:7}



static void Test_BFu7s_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu7s, BFu7s_BFu16s_BFu7s)
//============================================================================


struct  BFu7s_BFu16s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu16s_BFu8c) C1{ Fs:7 Fs:16 Fc:8}



static void Test_BFu7s_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu8c, BFu7s_BFu16s_BFu8c)
//============================================================================


struct  BFu7s_BFu16s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu16s_BFu8i) C1{ Fs:7 Fs:16 Fi:8}



static void Test_BFu7s_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu8i, BFu7s_BFu16s_BFu8i)
//============================================================================


struct  BFu7s_BFu16s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu16s_BFu8ll) C1{ Fs:7 Fs:16 FL:8}



static void Test_BFu7s_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu8ll, BFu7s_BFu16s_BFu8ll)
//============================================================================


struct  BFu7s_BFu16s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu16s_BFu8s) C1{ Fs:7 Fs:16 Fs:8}



static void Test_BFu7s_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu8s, BFu7s_BFu16s_BFu8s)
//============================================================================


struct  BFu7s_BFu16s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu16s_BFu9i) C1{ Fs:7 Fs:16 Fi:9}



static void Test_BFu7s_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu9i, BFu7s_BFu16s_BFu9i)
//============================================================================


struct  BFu7s_BFu16s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu16s_BFu9ll) C1{ Fs:7 Fs:16 FL:9}



static void Test_BFu7s_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu9ll, BFu7s_BFu16s_BFu9ll)
//============================================================================


struct  BFu7s_BFu16s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu16s_BFu9s) C1{ Fs:7 Fs:16 Fs:9}



static void Test_BFu7s_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_BFu9s, BFu7s_BFu16s_BFu9s)
//============================================================================


struct  BFu7s_BFu16s_C  {
  unsigned short v1:7;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu7s_BFu16s_C) C1{ Fs:7 Fs:16 Fc}



static void Test_BFu7s_BFu16s_C()
{
  {
    init_simple_test("BFu7s_BFu16s_C");
    static STRUCT_IF_C BFu7s_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_C, BFu7s_BFu16s_C)
//============================================================================


struct  BFu7s_BFu16s_D  {
  unsigned short v1:7;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu7s_BFu16s_D) C1{ Fs:7 Fs:16 FL}



static void Test_BFu7s_BFu16s_D()
{
  {
    init_simple_test("BFu7s_BFu16s_D");
    static STRUCT_IF_C BFu7s_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_D, BFu7s_BFu16s_D)
//============================================================================


struct  BFu7s_BFu16s_F  {
  unsigned short v1:7;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu7s_BFu16s_F) C1{ Fs:7 Fs:16 Fi}



static void Test_BFu7s_BFu16s_F()
{
  {
    init_simple_test("BFu7s_BFu16s_F");
    static STRUCT_IF_C BFu7s_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_F, BFu7s_BFu16s_F)
//============================================================================


struct  BFu7s_BFu16s_I  {
  unsigned short v1:7;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu7s_BFu16s_I) C1{ Fs:7 Fs:16 Fi}



static void Test_BFu7s_BFu16s_I()
{
  {
    init_simple_test("BFu7s_BFu16s_I");
    static STRUCT_IF_C BFu7s_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_I, BFu7s_BFu16s_I)
//============================================================================


struct  BFu7s_BFu16s_Ip  {
  unsigned short v1:7;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu7s_BFu16s_Ip) C1{ Fs:7 Fs:16 Fp}



static void Test_BFu7s_BFu16s_Ip()
{
  {
    init_simple_test("BFu7s_BFu16s_Ip");
    static STRUCT_IF_C BFu7s_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Ip, BFu7s_BFu16s_Ip)
//============================================================================


struct  BFu7s_BFu16s_L  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu16s_L) C1{ Fs:7 Fs:16 FL}



static void Test_BFu7s_BFu16s_L()
{
  {
    init_simple_test("BFu7s_BFu16s_L");
    static STRUCT_IF_C BFu7s_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_L, BFu7s_BFu16s_L)
//============================================================================


struct  BFu7s_BFu16s_S  {
  unsigned short v1:7;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu7s_BFu16s_S) C1{ Fs:7 Fs:16 Fs}



static void Test_BFu7s_BFu16s_S()
{
  {
    init_simple_test("BFu7s_BFu16s_S");
    static STRUCT_IF_C BFu7s_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_S, BFu7s_BFu16s_S)
//============================================================================


struct  BFu7s_BFu16s_Uc  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu16s_Uc) C1{ Fs:7 Fs:16 Fc}



static void Test_BFu7s_BFu16s_Uc()
{
  {
    init_simple_test("BFu7s_BFu16s_Uc");
    static STRUCT_IF_C BFu7s_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Uc, BFu7s_BFu16s_Uc)
//============================================================================


struct  BFu7s_BFu16s_Ui  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu16s_Ui) C1{ Fs:7 Fs:16 Fi}



static void Test_BFu7s_BFu16s_Ui()
{
  {
    init_simple_test("BFu7s_BFu16s_Ui");
    static STRUCT_IF_C BFu7s_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Ui, BFu7s_BFu16s_Ui)
//============================================================================


struct  BFu7s_BFu16s_Ul  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu16s_Ul) C1{ Fs:7 Fs:16 FL}



static void Test_BFu7s_BFu16s_Ul()
{
  {
    init_simple_test("BFu7s_BFu16s_Ul");
    static STRUCT_IF_C BFu7s_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Ul, BFu7s_BFu16s_Ul)
//============================================================================


struct  BFu7s_BFu16s_Us  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu16s_Us) C1{ Fs:7 Fs:16 Fs}



static void Test_BFu7s_BFu16s_Us()
{
  {
    init_simple_test("BFu7s_BFu16s_Us");
    static STRUCT_IF_C BFu7s_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Us, BFu7s_BFu16s_Us)
//============================================================================


struct  BFu7s_BFu16s_Vp  {
  unsigned short v1:7;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu7s_BFu16s_Vp) C1{ Fs:7 Fs:16 Fp}



static void Test_BFu7s_BFu16s_Vp()
{
  {
    init_simple_test("BFu7s_BFu16s_Vp");
    static STRUCT_IF_C BFu7s_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu16s_Vp, BFu7s_BFu16s_Vp)
//============================================================================


struct  BFu7s_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu7s_BFu17i) C1{ Fs:7 Fi:17}



static void Test_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i, BFu7s_BFu17i)
//============================================================================


struct  BFu7s_BFu17i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu17i_BFu15i) C1{ Fs:7 Fi:17 Fi:15}



static void Test_BFu7s_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu15i, BFu7s_BFu17i_BFu15i)
//============================================================================


struct  BFu7s_BFu17i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu17i_BFu15ll) C1{ Fs:7 Fi:17 FL:15}



static void Test_BFu7s_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu15ll, BFu7s_BFu17i_BFu15ll)
//============================================================================


struct  BFu7s_BFu17i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu17i_BFu15s) C1{ Fs:7 Fi:17 Fs:15}



static void Test_BFu7s_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu15s, BFu7s_BFu17i_BFu15s)
//============================================================================


struct  BFu7s_BFu17i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu17i_BFu16i) C1{ Fs:7 Fi:17 Fi:16}



static void Test_BFu7s_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu16i, BFu7s_BFu17i_BFu16i)
//============================================================================


struct  BFu7s_BFu17i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu17i_BFu16ll) C1{ Fs:7 Fi:17 FL:16}



static void Test_BFu7s_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu16ll, BFu7s_BFu17i_BFu16ll)
//============================================================================


struct  BFu7s_BFu17i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu17i_BFu16s) C1{ Fs:7 Fi:17 Fs:16}



static void Test_BFu7s_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu16s, BFu7s_BFu17i_BFu16s)
//============================================================================


struct  BFu7s_BFu17i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu17i_BFu17i) C1{ Fs:7 Fi:17 Fi:17}



static void Test_BFu7s_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu17i, BFu7s_BFu17i_BFu17i)
//============================================================================


struct  BFu7s_BFu17i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu17i_BFu17ll) C1{ Fs:7 Fi:17 FL:17}



static void Test_BFu7s_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu17ll, BFu7s_BFu17i_BFu17ll)
//============================================================================


struct  BFu7s_BFu17i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu17i_BFu1c) C1{ Fs:7 Fi:17 Fc:1}



static void Test_BFu7s_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu1c, BFu7s_BFu17i_BFu1c)
//============================================================================


struct  BFu7s_BFu17i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu17i_BFu1i) C1{ Fs:7 Fi:17 Fi:1}



static void Test_BFu7s_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu1i, BFu7s_BFu17i_BFu1i)
//============================================================================


struct  BFu7s_BFu17i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu17i_BFu1ll) C1{ Fs:7 Fi:17 FL:1}



static void Test_BFu7s_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu1ll, BFu7s_BFu17i_BFu1ll)
//============================================================================


struct  BFu7s_BFu17i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu17i_BFu1s) C1{ Fs:7 Fi:17 Fs:1}



static void Test_BFu7s_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu1s, BFu7s_BFu17i_BFu1s)
//============================================================================


struct  BFu7s_BFu17i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu17i_BFu31i) C1{ Fs:7 Fi:17 Fi:31}



static void Test_BFu7s_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu31i, BFu7s_BFu17i_BFu31i)
//============================================================================


struct  BFu7s_BFu17i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu17i_BFu31ll) C1{ Fs:7 Fi:17 FL:31}



static void Test_BFu7s_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu31ll, BFu7s_BFu17i_BFu31ll)
//============================================================================


struct  BFu7s_BFu17i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu17i_BFu32i) C1{ Fs:7 Fi:17 Fi:32}



static void Test_BFu7s_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu32i, BFu7s_BFu17i_BFu32i)
//============================================================================


struct  BFu7s_BFu17i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu17i_BFu32ll) C1{ Fs:7 Fi:17 FL:32}



static void Test_BFu7s_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu32ll, BFu7s_BFu17i_BFu32ll)
//============================================================================


struct  BFu7s_BFu17i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu17i_BFu33) C1{ Fs:7 Fi:17 FL:33}



static void Test_BFu7s_BFu17i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu33");
    static STRUCT_IF_C BFu7s_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu33, BFu7s_BFu17i_BFu33)
//============================================================================


struct  BFu7s_BFu17i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu17i_BFu7c) C1{ Fs:7 Fi:17 Fc:7}



static void Test_BFu7s_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu7c, BFu7s_BFu17i_BFu7c)
//============================================================================


struct  BFu7s_BFu17i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu17i_BFu7i) C1{ Fs:7 Fi:17 Fi:7}



static void Test_BFu7s_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu7i, BFu7s_BFu17i_BFu7i)
//============================================================================


struct  BFu7s_BFu17i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu17i_BFu7ll) C1{ Fs:7 Fi:17 FL:7}



static void Test_BFu7s_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu7ll, BFu7s_BFu17i_BFu7ll)
//============================================================================


struct  BFu7s_BFu17i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu17i_BFu7s) C1{ Fs:7 Fi:17 Fs:7}



static void Test_BFu7s_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu7s, BFu7s_BFu17i_BFu7s)
//============================================================================


struct  BFu7s_BFu17i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu17i_BFu8c) C1{ Fs:7 Fi:17 Fc:8}



static void Test_BFu7s_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu8c, BFu7s_BFu17i_BFu8c)
//============================================================================


struct  BFu7s_BFu17i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu17i_BFu8i) C1{ Fs:7 Fi:17 Fi:8}



static void Test_BFu7s_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu8i, BFu7s_BFu17i_BFu8i)
//============================================================================


struct  BFu7s_BFu17i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu17i_BFu8ll) C1{ Fs:7 Fi:17 FL:8}



static void Test_BFu7s_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu8ll, BFu7s_BFu17i_BFu8ll)
//============================================================================


struct  BFu7s_BFu17i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu17i_BFu8s) C1{ Fs:7 Fi:17 Fs:8}



static void Test_BFu7s_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu8s, BFu7s_BFu17i_BFu8s)
//============================================================================


struct  BFu7s_BFu17i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu17i_BFu9i) C1{ Fs:7 Fi:17 Fi:9}



static void Test_BFu7s_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu9i, BFu7s_BFu17i_BFu9i)
//============================================================================


struct  BFu7s_BFu17i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu17i_BFu9ll) C1{ Fs:7 Fi:17 FL:9}



static void Test_BFu7s_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu9ll, BFu7s_BFu17i_BFu9ll)
//============================================================================


struct  BFu7s_BFu17i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu17i_BFu9s) C1{ Fs:7 Fi:17 Fs:9}



static void Test_BFu7s_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_BFu9s, BFu7s_BFu17i_BFu9s)
//============================================================================


struct  BFu7s_BFu17i_C  {
  unsigned short v1:7;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu7s_BFu17i_C) C1{ Fs:7 Fi:17 Fc}



static void Test_BFu7s_BFu17i_C()
{
  {
    init_simple_test("BFu7s_BFu17i_C");
    static STRUCT_IF_C BFu7s_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_C, BFu7s_BFu17i_C)
//============================================================================


struct  BFu7s_BFu17i_D  {
  unsigned short v1:7;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu7s_BFu17i_D) C1{ Fs:7 Fi:17 FL}



static void Test_BFu7s_BFu17i_D()
{
  {
    init_simple_test("BFu7s_BFu17i_D");
    static STRUCT_IF_C BFu7s_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_D, BFu7s_BFu17i_D)
//============================================================================


struct  BFu7s_BFu17i_F  {
  unsigned short v1:7;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu7s_BFu17i_F) C1{ Fs:7 Fi:17 Fi}



static void Test_BFu7s_BFu17i_F()
{
  {
    init_simple_test("BFu7s_BFu17i_F");
    static STRUCT_IF_C BFu7s_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_F, BFu7s_BFu17i_F)
//============================================================================


struct  BFu7s_BFu17i_I  {
  unsigned short v1:7;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu7s_BFu17i_I) C1{ Fs:7 Fi:17 Fi}



static void Test_BFu7s_BFu17i_I()
{
  {
    init_simple_test("BFu7s_BFu17i_I");
    static STRUCT_IF_C BFu7s_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_I, BFu7s_BFu17i_I)
//============================================================================


struct  BFu7s_BFu17i_Ip  {
  unsigned short v1:7;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu7s_BFu17i_Ip) C1{ Fs:7 Fi:17 Fp}



static void Test_BFu7s_BFu17i_Ip()
{
  {
    init_simple_test("BFu7s_BFu17i_Ip");
    static STRUCT_IF_C BFu7s_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Ip, BFu7s_BFu17i_Ip)
//============================================================================


struct  BFu7s_BFu17i_L  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu17i_L) C1{ Fs:7 Fi:17 FL}



static void Test_BFu7s_BFu17i_L()
{
  {
    init_simple_test("BFu7s_BFu17i_L");
    static STRUCT_IF_C BFu7s_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_L, BFu7s_BFu17i_L)
//============================================================================


struct  BFu7s_BFu17i_S  {
  unsigned short v1:7;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu7s_BFu17i_S) C1{ Fs:7 Fi:17 Fs}



static void Test_BFu7s_BFu17i_S()
{
  {
    init_simple_test("BFu7s_BFu17i_S");
    static STRUCT_IF_C BFu7s_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_S, BFu7s_BFu17i_S)
//============================================================================


struct  BFu7s_BFu17i_Uc  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu17i_Uc) C1{ Fs:7 Fi:17 Fc}



static void Test_BFu7s_BFu17i_Uc()
{
  {
    init_simple_test("BFu7s_BFu17i_Uc");
    static STRUCT_IF_C BFu7s_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Uc, BFu7s_BFu17i_Uc)
//============================================================================


struct  BFu7s_BFu17i_Ui  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu17i_Ui) C1{ Fs:7 Fi:17 Fi}



static void Test_BFu7s_BFu17i_Ui()
{
  {
    init_simple_test("BFu7s_BFu17i_Ui");
    static STRUCT_IF_C BFu7s_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Ui, BFu7s_BFu17i_Ui)
//============================================================================


struct  BFu7s_BFu17i_Ul  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu17i_Ul) C1{ Fs:7 Fi:17 FL}



static void Test_BFu7s_BFu17i_Ul()
{
  {
    init_simple_test("BFu7s_BFu17i_Ul");
    static STRUCT_IF_C BFu7s_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Ul, BFu7s_BFu17i_Ul)
//============================================================================


struct  BFu7s_BFu17i_Us  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu17i_Us) C1{ Fs:7 Fi:17 Fs}



static void Test_BFu7s_BFu17i_Us()
{
  {
    init_simple_test("BFu7s_BFu17i_Us");
    static STRUCT_IF_C BFu7s_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Us, BFu7s_BFu17i_Us)
//============================================================================


struct  BFu7s_BFu17i_Vp  {
  unsigned short v1:7;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu7s_BFu17i_Vp) C1{ Fs:7 Fi:17 Fp}



static void Test_BFu7s_BFu17i_Vp()
{
  {
    init_simple_test("BFu7s_BFu17i_Vp");
    static STRUCT_IF_C BFu7s_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17i_Vp, BFu7s_BFu17i_Vp)
//============================================================================


struct  BFu7s_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu7s_BFu17ll) C1{ Fs:7 FL:17}



static void Test_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll, BFu7s_BFu17ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu17ll_BFu15i) C1{ Fs:7 FL:17 Fi:15}



static void Test_BFu7s_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu15i, BFu7s_BFu17ll_BFu15i)
//============================================================================


struct  BFu7s_BFu17ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu17ll_BFu15ll) C1{ Fs:7 FL:17 FL:15}



static void Test_BFu7s_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu15ll, BFu7s_BFu17ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu17ll_BFu15s) C1{ Fs:7 FL:17 Fs:15}



static void Test_BFu7s_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu15s, BFu7s_BFu17ll_BFu15s)
//============================================================================


struct  BFu7s_BFu17ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu17ll_BFu16i) C1{ Fs:7 FL:17 Fi:16}



static void Test_BFu7s_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu16i, BFu7s_BFu17ll_BFu16i)
//============================================================================


struct  BFu7s_BFu17ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu17ll_BFu16ll) C1{ Fs:7 FL:17 FL:16}



static void Test_BFu7s_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu16ll, BFu7s_BFu17ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu17ll_BFu16s) C1{ Fs:7 FL:17 Fs:16}



static void Test_BFu7s_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu16s, BFu7s_BFu17ll_BFu16s)
//============================================================================


struct  BFu7s_BFu17ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu17ll_BFu17i) C1{ Fs:7 FL:17 Fi:17}



static void Test_BFu7s_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu17i, BFu7s_BFu17ll_BFu17i)
//============================================================================


struct  BFu7s_BFu17ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu17ll_BFu17ll) C1{ Fs:7 FL:17 FL:17}



static void Test_BFu7s_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu17ll, BFu7s_BFu17ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu17ll_BFu1c) C1{ Fs:7 FL:17 Fc:1}



static void Test_BFu7s_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu1c, BFu7s_BFu17ll_BFu1c)
//============================================================================


struct  BFu7s_BFu17ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu17ll_BFu1i) C1{ Fs:7 FL:17 Fi:1}



static void Test_BFu7s_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu1i, BFu7s_BFu17ll_BFu1i)
//============================================================================


struct  BFu7s_BFu17ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu17ll_BFu1ll) C1{ Fs:7 FL:17 FL:1}



static void Test_BFu7s_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu1ll, BFu7s_BFu17ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu17ll_BFu1s) C1{ Fs:7 FL:17 Fs:1}



static void Test_BFu7s_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7s_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu1s, BFu7s_BFu17ll_BFu1s)
//============================================================================


struct  BFu7s_BFu17ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu17ll_BFu31i) C1{ Fs:7 FL:17 Fi:31}



static void Test_BFu7s_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu31i, BFu7s_BFu17ll_BFu31i)
//============================================================================


struct  BFu7s_BFu17ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu17ll_BFu31ll) C1{ Fs:7 FL:17 FL:31}



static void Test_BFu7s_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu31ll, BFu7s_BFu17ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu17ll_BFu32i) C1{ Fs:7 FL:17 Fi:32}



static void Test_BFu7s_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu32i, BFu7s_BFu17ll_BFu32i)
//============================================================================


struct  BFu7s_BFu17ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu17ll_BFu32ll) C1{ Fs:7 FL:17 FL:32}



static void Test_BFu7s_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu32ll, BFu7s_BFu17ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu17ll_BFu33) C1{ Fs:7 FL:17 FL:33}



static void Test_BFu7s_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu33, BFu7s_BFu17ll_BFu33)
//============================================================================


struct  BFu7s_BFu17ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu17ll_BFu7c) C1{ Fs:7 FL:17 Fc:7}



static void Test_BFu7s_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu7c, BFu7s_BFu17ll_BFu7c)
//============================================================================


struct  BFu7s_BFu17ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu17ll_BFu7i) C1{ Fs:7 FL:17 Fi:7}



static void Test_BFu7s_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu7i, BFu7s_BFu17ll_BFu7i)
//============================================================================


struct  BFu7s_BFu17ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu17ll_BFu7ll) C1{ Fs:7 FL:17 FL:7}



static void Test_BFu7s_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu7ll, BFu7s_BFu17ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu17ll_BFu7s) C1{ Fs:7 FL:17 Fs:7}



static void Test_BFu7s_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu7s, BFu7s_BFu17ll_BFu7s)
//============================================================================


struct  BFu7s_BFu17ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu17ll_BFu8c) C1{ Fs:7 FL:17 Fc:8}



static void Test_BFu7s_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu8c, BFu7s_BFu17ll_BFu8c)
//============================================================================


struct  BFu7s_BFu17ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu17ll_BFu8i) C1{ Fs:7 FL:17 Fi:8}



static void Test_BFu7s_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu8i, BFu7s_BFu17ll_BFu8i)
//============================================================================


struct  BFu7s_BFu17ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu17ll_BFu8ll) C1{ Fs:7 FL:17 FL:8}



static void Test_BFu7s_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu8ll, BFu7s_BFu17ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu17ll_BFu8s) C1{ Fs:7 FL:17 Fs:8}



static void Test_BFu7s_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu8s, BFu7s_BFu17ll_BFu8s)
//============================================================================


struct  BFu7s_BFu17ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu17ll_BFu9i) C1{ Fs:7 FL:17 Fi:9}



static void Test_BFu7s_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu9i, BFu7s_BFu17ll_BFu9i)
//============================================================================


struct  BFu7s_BFu17ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu17ll_BFu9ll) C1{ Fs:7 FL:17 FL:9}



static void Test_BFu7s_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu9ll, BFu7s_BFu17ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu17ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu17ll_BFu9s) C1{ Fs:7 FL:17 Fs:9}



static void Test_BFu7s_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_BFu9s, BFu7s_BFu17ll_BFu9s)
//============================================================================


struct  BFu7s_BFu17ll_C  {
  unsigned short v1:7;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu7s_BFu17ll_C) C1{ Fs:7 FL:17 Fc}



static void Test_BFu7s_BFu17ll_C()
{
  {
    init_simple_test("BFu7s_BFu17ll_C");
    static STRUCT_IF_C BFu7s_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_C");
    check_field_offset(lv, v3, 3, "BFu7s_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_C, BFu7s_BFu17ll_C)
//============================================================================


struct  BFu7s_BFu17ll_D  {
  unsigned short v1:7;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu7s_BFu17ll_D) C1{ Fs:7 FL:17 FL}



static void Test_BFu7s_BFu17ll_D()
{
  {
    init_simple_test("BFu7s_BFu17ll_D");
    static STRUCT_IF_C BFu7s_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_D, BFu7s_BFu17ll_D)
//============================================================================


struct  BFu7s_BFu17ll_F  {
  unsigned short v1:7;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu7s_BFu17ll_F) C1{ Fs:7 FL:17 Fi}



static void Test_BFu7s_BFu17ll_F()
{
  {
    init_simple_test("BFu7s_BFu17ll_F");
    static STRUCT_IF_C BFu7s_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_F, BFu7s_BFu17ll_F)
//============================================================================


struct  BFu7s_BFu17ll_I  {
  unsigned short v1:7;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu7s_BFu17ll_I) C1{ Fs:7 FL:17 Fi}



static void Test_BFu7s_BFu17ll_I()
{
  {
    init_simple_test("BFu7s_BFu17ll_I");
    static STRUCT_IF_C BFu7s_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_I, BFu7s_BFu17ll_I)
//============================================================================


struct  BFu7s_BFu17ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu7s_BFu17ll_Ip) C1{ Fs:7 FL:17 Fp}



static void Test_BFu7s_BFu17ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu17ll_Ip");
    static STRUCT_IF_C BFu7s_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Ip, BFu7s_BFu17ll_Ip)
//============================================================================


struct  BFu7s_BFu17ll_L  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu17ll_L) C1{ Fs:7 FL:17 FL}



static void Test_BFu7s_BFu17ll_L()
{
  {
    init_simple_test("BFu7s_BFu17ll_L");
    static STRUCT_IF_C BFu7s_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_L, BFu7s_BFu17ll_L)
//============================================================================


struct  BFu7s_BFu17ll_S  {
  unsigned short v1:7;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu7s_BFu17ll_S) C1{ Fs:7 FL:17 Fs}



static void Test_BFu7s_BFu17ll_S()
{
  {
    init_simple_test("BFu7s_BFu17ll_S");
    static STRUCT_IF_C BFu7s_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_S, BFu7s_BFu17ll_S)
//============================================================================


struct  BFu7s_BFu17ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu17ll_Uc) C1{ Fs:7 FL:17 Fc}



static void Test_BFu7s_BFu17ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu17ll_Uc");
    static STRUCT_IF_C BFu7s_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7s_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Uc, BFu7s_BFu17ll_Uc)
//============================================================================


struct  BFu7s_BFu17ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu17ll_Ui) C1{ Fs:7 FL:17 Fi}



static void Test_BFu7s_BFu17ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu17ll_Ui");
    static STRUCT_IF_C BFu7s_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Ui, BFu7s_BFu17ll_Ui)
//============================================================================


struct  BFu7s_BFu17ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu17ll_Ul) C1{ Fs:7 FL:17 FL}



static void Test_BFu7s_BFu17ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu17ll_Ul");
    static STRUCT_IF_C BFu7s_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Ul, BFu7s_BFu17ll_Ul)
//============================================================================


struct  BFu7s_BFu17ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu17ll_Us) C1{ Fs:7 FL:17 Fs}



static void Test_BFu7s_BFu17ll_Us()
{
  {
    init_simple_test("BFu7s_BFu17ll_Us");
    static STRUCT_IF_C BFu7s_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu7s_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Us, BFu7s_BFu17ll_Us)
//============================================================================


struct  BFu7s_BFu17ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu7s_BFu17ll_Vp) C1{ Fs:7 FL:17 Fp}



static void Test_BFu7s_BFu17ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu17ll_Vp");
    static STRUCT_IF_C BFu7s_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu17ll_Vp, BFu7s_BFu17ll_Vp)
//============================================================================


struct  BFu7s_BFu1c  {
  unsigned short v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu7s_BFu1c) C1{ Fs:7 Fc:1}



static void Test_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c, BFu7s_BFu1c)
//============================================================================


struct  BFu7s_BFu1c_BFu15i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu1c_BFu15i) C1{ Fs:7 Fc:1 Fi:15}



static void Test_BFu7s_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu15i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu15i, BFu7s_BFu1c_BFu15i)
//============================================================================


struct  BFu7s_BFu1c_BFu15ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu1c_BFu15ll) C1{ Fs:7 Fc:1 FL:15}



static void Test_BFu7s_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu15ll, BFu7s_BFu1c_BFu15ll)
//============================================================================


struct  BFu7s_BFu1c_BFu15s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu1c_BFu15s) C1{ Fs:7 Fc:1 Fs:15}



static void Test_BFu7s_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu15s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu15s, BFu7s_BFu1c_BFu15s)
//============================================================================


struct  BFu7s_BFu1c_BFu16i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu1c_BFu16i) C1{ Fs:7 Fc:1 Fi:16}



static void Test_BFu7s_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu16i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu16i, BFu7s_BFu1c_BFu16i)
//============================================================================


struct  BFu7s_BFu1c_BFu16ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu1c_BFu16ll) C1{ Fs:7 Fc:1 FL:16}



static void Test_BFu7s_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu16ll, BFu7s_BFu1c_BFu16ll)
//============================================================================


struct  BFu7s_BFu1c_BFu16s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu1c_BFu16s) C1{ Fs:7 Fc:1 Fs:16}



static void Test_BFu7s_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu16s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu16s, BFu7s_BFu1c_BFu16s)
//============================================================================


struct  BFu7s_BFu1c_BFu17i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu1c_BFu17i) C1{ Fs:7 Fc:1 Fi:17}



static void Test_BFu7s_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu17i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu17i, BFu7s_BFu1c_BFu17i)
//============================================================================


struct  BFu7s_BFu1c_BFu17ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu1c_BFu17ll) C1{ Fs:7 Fc:1 FL:17}



static void Test_BFu7s_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu17ll, BFu7s_BFu1c_BFu17ll)
//============================================================================


struct  BFu7s_BFu1c_BFu1c  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu1c_BFu1c) C1{ Fs:7 Fc:1 Fc:1}



static void Test_BFu7s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu1c");
    static STRUCT_IF_C BFu7s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu1c, BFu7s_BFu1c_BFu1c)
//============================================================================


struct  BFu7s_BFu1c_BFu1i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu1c_BFu1i) C1{ Fs:7 Fc:1 Fi:1}



static void Test_BFu7s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu1i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu1i, BFu7s_BFu1c_BFu1i)
//============================================================================


struct  BFu7s_BFu1c_BFu1ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu1c_BFu1ll) C1{ Fs:7 Fc:1 FL:1}



static void Test_BFu7s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu1ll, BFu7s_BFu1c_BFu1ll)
//============================================================================


struct  BFu7s_BFu1c_BFu1s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu1c_BFu1s) C1{ Fs:7 Fc:1 Fs:1}



static void Test_BFu7s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu1s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu1s, BFu7s_BFu1c_BFu1s)
//============================================================================


struct  BFu7s_BFu1c_BFu31i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu1c_BFu31i) C1{ Fs:7 Fc:1 Fi:31}



static void Test_BFu7s_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu31i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu31i, BFu7s_BFu1c_BFu31i)
//============================================================================


struct  BFu7s_BFu1c_BFu31ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu1c_BFu31ll) C1{ Fs:7 Fc:1 FL:31}



static void Test_BFu7s_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu31ll, BFu7s_BFu1c_BFu31ll)
//============================================================================


struct  BFu7s_BFu1c_BFu32i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu1c_BFu32i) C1{ Fs:7 Fc:1 Fi:32}



static void Test_BFu7s_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu32i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu32i, BFu7s_BFu1c_BFu32i)
//============================================================================


struct  BFu7s_BFu1c_BFu32ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu1c_BFu32ll) C1{ Fs:7 Fc:1 FL:32}



static void Test_BFu7s_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu32ll, BFu7s_BFu1c_BFu32ll)
//============================================================================


struct  BFu7s_BFu1c_BFu33  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu1c_BFu33) C1{ Fs:7 Fc:1 FL:33}



static void Test_BFu7s_BFu1c_BFu33()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu33");
    static STRUCT_IF_C BFu7s_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu33, BFu7s_BFu1c_BFu33)
//============================================================================


struct  BFu7s_BFu1c_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu1c_BFu7c) C1{ Fs:7 Fc:1 Fc:7}



static void Test_BFu7s_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu1c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu7c, BFu7s_BFu1c_BFu7c)
//============================================================================


struct  BFu7s_BFu1c_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu1c_BFu7i) C1{ Fs:7 Fc:1 Fi:7}



static void Test_BFu7s_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu7i, BFu7s_BFu1c_BFu7i)
//============================================================================


struct  BFu7s_BFu1c_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu1c_BFu7ll) C1{ Fs:7 Fc:1 FL:7}



static void Test_BFu7s_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu7ll, BFu7s_BFu1c_BFu7ll)
//============================================================================


struct  BFu7s_BFu1c_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu1c_BFu7s) C1{ Fs:7 Fc:1 Fs:7}



static void Test_BFu7s_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu7s, BFu7s_BFu1c_BFu7s)
//============================================================================


struct  BFu7s_BFu1c_BFu8c  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu1c_BFu8c) C1{ Fs:7 Fc:1 Fc:8}



static void Test_BFu7s_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu8c");
    static STRUCT_IF_C BFu7s_BFu1c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu8c, BFu7s_BFu1c_BFu8c)
//============================================================================


struct  BFu7s_BFu1c_BFu8i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu1c_BFu8i) C1{ Fs:7 Fc:1 Fi:8}



static void Test_BFu7s_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu8i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu8i, BFu7s_BFu1c_BFu8i)
//============================================================================


struct  BFu7s_BFu1c_BFu8ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu1c_BFu8ll) C1{ Fs:7 Fc:1 FL:8}



static void Test_BFu7s_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu8ll, BFu7s_BFu1c_BFu8ll)
//============================================================================


struct  BFu7s_BFu1c_BFu8s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu1c_BFu8s) C1{ Fs:7 Fc:1 Fs:8}



static void Test_BFu7s_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu8s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu8s, BFu7s_BFu1c_BFu8s)
//============================================================================


struct  BFu7s_BFu1c_BFu9i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu1c_BFu9i) C1{ Fs:7 Fc:1 Fi:9}



static void Test_BFu7s_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu9i");
    static STRUCT_IF_C BFu7s_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu9i, BFu7s_BFu1c_BFu9i)
//============================================================================


struct  BFu7s_BFu1c_BFu9ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu1c_BFu9ll) C1{ Fs:7 Fc:1 FL:9}



static void Test_BFu7s_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu9ll, BFu7s_BFu1c_BFu9ll)
//============================================================================


struct  BFu7s_BFu1c_BFu9s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu1c_BFu9s) C1{ Fs:7 Fc:1 Fs:9}



static void Test_BFu7s_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu9s");
    static STRUCT_IF_C BFu7s_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_BFu9s, BFu7s_BFu1c_BFu9s)
//============================================================================


struct  BFu7s_BFu1c_C  {
  unsigned short v1:7;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu7s_BFu1c_C) C1{ Fs:7 Fc:1 Fc}



static void Test_BFu7s_BFu1c_C()
{
  {
    init_simple_test("BFu7s_BFu1c_C");
    static STRUCT_IF_C BFu7s_BFu1c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_C");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_C, BFu7s_BFu1c_C)
//============================================================================


struct  BFu7s_BFu1c_D  {
  unsigned short v1:7;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu7s_BFu1c_D) C1{ Fs:7 Fc:1 FL}



static void Test_BFu7s_BFu1c_D()
{
  {
    init_simple_test("BFu7s_BFu1c_D");
    static STRUCT_IF_C BFu7s_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_D, BFu7s_BFu1c_D)
//============================================================================


struct  BFu7s_BFu1c_F  {
  unsigned short v1:7;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu7s_BFu1c_F) C1{ Fs:7 Fc:1 Fi}



static void Test_BFu7s_BFu1c_F()
{
  {
    init_simple_test("BFu7s_BFu1c_F");
    static STRUCT_IF_C BFu7s_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_F, BFu7s_BFu1c_F)
//============================================================================


struct  BFu7s_BFu1c_I  {
  unsigned short v1:7;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu7s_BFu1c_I) C1{ Fs:7 Fc:1 Fi}



static void Test_BFu7s_BFu1c_I()
{
  {
    init_simple_test("BFu7s_BFu1c_I");
    static STRUCT_IF_C BFu7s_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_I, BFu7s_BFu1c_I)
//============================================================================


struct  BFu7s_BFu1c_Ip  {
  unsigned short v1:7;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu7s_BFu1c_Ip) C1{ Fs:7 Fc:1 Fp}



static void Test_BFu7s_BFu1c_Ip()
{
  {
    init_simple_test("BFu7s_BFu1c_Ip");
    static STRUCT_IF_C BFu7s_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Ip, BFu7s_BFu1c_Ip)
//============================================================================


struct  BFu7s_BFu1c_L  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu1c_L) C1{ Fs:7 Fc:1 FL}



static void Test_BFu7s_BFu1c_L()
{
  {
    init_simple_test("BFu7s_BFu1c_L");
    static STRUCT_IF_C BFu7s_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_L, BFu7s_BFu1c_L)
//============================================================================


struct  BFu7s_BFu1c_S  {
  unsigned short v1:7;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu7s_BFu1c_S) C1{ Fs:7 Fc:1 Fs}



static void Test_BFu7s_BFu1c_S()
{
  {
    init_simple_test("BFu7s_BFu1c_S");
    static STRUCT_IF_C BFu7s_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_S, BFu7s_BFu1c_S)
//============================================================================


struct  BFu7s_BFu1c_Uc  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu1c_Uc) C1{ Fs:7 Fc:1 Fc}



static void Test_BFu7s_BFu1c_Uc()
{
  {
    init_simple_test("BFu7s_BFu1c_Uc");
    static STRUCT_IF_C BFu7s_BFu1c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Uc");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Uc, BFu7s_BFu1c_Uc)
//============================================================================


struct  BFu7s_BFu1c_Ui  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu1c_Ui) C1{ Fs:7 Fc:1 Fi}



static void Test_BFu7s_BFu1c_Ui()
{
  {
    init_simple_test("BFu7s_BFu1c_Ui");
    static STRUCT_IF_C BFu7s_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Ui, BFu7s_BFu1c_Ui)
//============================================================================


struct  BFu7s_BFu1c_Ul  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu1c_Ul) C1{ Fs:7 Fc:1 FL}



static void Test_BFu7s_BFu1c_Ul()
{
  {
    init_simple_test("BFu7s_BFu1c_Ul");
    static STRUCT_IF_C BFu7s_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Ul, BFu7s_BFu1c_Ul)
//============================================================================


struct  BFu7s_BFu1c_Us  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu1c_Us) C1{ Fs:7 Fc:1 Fs}



static void Test_BFu7s_BFu1c_Us()
{
  {
    init_simple_test("BFu7s_BFu1c_Us");
    static STRUCT_IF_C BFu7s_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Us, BFu7s_BFu1c_Us)
//============================================================================


struct  BFu7s_BFu1c_Vp  {
  unsigned short v1:7;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu7s_BFu1c_Vp) C1{ Fs:7 Fc:1 Fp}



static void Test_BFu7s_BFu1c_Vp()
{
  {
    init_simple_test("BFu7s_BFu1c_Vp");
    static STRUCT_IF_C BFu7s_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1c_Vp, BFu7s_BFu1c_Vp)
//============================================================================


struct  BFu7s_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu7s_BFu1i) C1{ Fs:7 Fi:1}



static void Test_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i, BFu7s_BFu1i)
//============================================================================


struct  BFu7s_BFu1i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu1i_BFu15i) C1{ Fs:7 Fi:1 Fi:15}



static void Test_BFu7s_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu15i, BFu7s_BFu1i_BFu15i)
//============================================================================


struct  BFu7s_BFu1i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu1i_BFu15ll) C1{ Fs:7 Fi:1 FL:15}



static void Test_BFu7s_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu15ll, BFu7s_BFu1i_BFu15ll)
//============================================================================


struct  BFu7s_BFu1i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu1i_BFu15s) C1{ Fs:7 Fi:1 Fs:15}



static void Test_BFu7s_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu15s, BFu7s_BFu1i_BFu15s)
//============================================================================


struct  BFu7s_BFu1i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu1i_BFu16i) C1{ Fs:7 Fi:1 Fi:16}



static void Test_BFu7s_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu16i, BFu7s_BFu1i_BFu16i)
//============================================================================


struct  BFu7s_BFu1i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu1i_BFu16ll) C1{ Fs:7 Fi:1 FL:16}



static void Test_BFu7s_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu16ll, BFu7s_BFu1i_BFu16ll)
//============================================================================


struct  BFu7s_BFu1i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu1i_BFu16s) C1{ Fs:7 Fi:1 Fs:16}



static void Test_BFu7s_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu16s, BFu7s_BFu1i_BFu16s)
//============================================================================


struct  BFu7s_BFu1i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu1i_BFu17i) C1{ Fs:7 Fi:1 Fi:17}



static void Test_BFu7s_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu17i, BFu7s_BFu1i_BFu17i)
//============================================================================


struct  BFu7s_BFu1i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu1i_BFu17ll) C1{ Fs:7 Fi:1 FL:17}



static void Test_BFu7s_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu17ll, BFu7s_BFu1i_BFu17ll)
//============================================================================


struct  BFu7s_BFu1i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu1i_BFu1c) C1{ Fs:7 Fi:1 Fc:1}



static void Test_BFu7s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu1c, BFu7s_BFu1i_BFu1c)
//============================================================================


struct  BFu7s_BFu1i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu1i_BFu1i) C1{ Fs:7 Fi:1 Fi:1}



static void Test_BFu7s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu1i, BFu7s_BFu1i_BFu1i)
//============================================================================


struct  BFu7s_BFu1i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu1i_BFu1ll) C1{ Fs:7 Fi:1 FL:1}



static void Test_BFu7s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu1ll, BFu7s_BFu1i_BFu1ll)
//============================================================================


struct  BFu7s_BFu1i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu1i_BFu1s) C1{ Fs:7 Fi:1 Fs:1}



static void Test_BFu7s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu1s, BFu7s_BFu1i_BFu1s)
//============================================================================


struct  BFu7s_BFu1i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu1i_BFu31i) C1{ Fs:7 Fi:1 Fi:31}



static void Test_BFu7s_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu31i, BFu7s_BFu1i_BFu31i)
//============================================================================


struct  BFu7s_BFu1i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu1i_BFu31ll) C1{ Fs:7 Fi:1 FL:31}



static void Test_BFu7s_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu31ll, BFu7s_BFu1i_BFu31ll)
//============================================================================


struct  BFu7s_BFu1i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu1i_BFu32i) C1{ Fs:7 Fi:1 Fi:32}



static void Test_BFu7s_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu32i, BFu7s_BFu1i_BFu32i)
//============================================================================


struct  BFu7s_BFu1i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu1i_BFu32ll) C1{ Fs:7 Fi:1 FL:32}



static void Test_BFu7s_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu32ll, BFu7s_BFu1i_BFu32ll)
//============================================================================


struct  BFu7s_BFu1i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu1i_BFu33) C1{ Fs:7 Fi:1 FL:33}



static void Test_BFu7s_BFu1i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu33");
    static STRUCT_IF_C BFu7s_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu33, BFu7s_BFu1i_BFu33)
//============================================================================


struct  BFu7s_BFu1i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu1i_BFu7c) C1{ Fs:7 Fi:1 Fc:7}



static void Test_BFu7s_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu7c, BFu7s_BFu1i_BFu7c)
//============================================================================


struct  BFu7s_BFu1i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu1i_BFu7i) C1{ Fs:7 Fi:1 Fi:7}



static void Test_BFu7s_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu7i, BFu7s_BFu1i_BFu7i)
//============================================================================


struct  BFu7s_BFu1i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu1i_BFu7ll) C1{ Fs:7 Fi:1 FL:7}



static void Test_BFu7s_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu7ll, BFu7s_BFu1i_BFu7ll)
//============================================================================


struct  BFu7s_BFu1i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu1i_BFu7s) C1{ Fs:7 Fi:1 Fs:7}



static void Test_BFu7s_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu7s, BFu7s_BFu1i_BFu7s)
//============================================================================


struct  BFu7s_BFu1i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu1i_BFu8c) C1{ Fs:7 Fi:1 Fc:8}



static void Test_BFu7s_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu8c, BFu7s_BFu1i_BFu8c)
//============================================================================


struct  BFu7s_BFu1i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu1i_BFu8i) C1{ Fs:7 Fi:1 Fi:8}



static void Test_BFu7s_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu8i, BFu7s_BFu1i_BFu8i)
//============================================================================


struct  BFu7s_BFu1i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu1i_BFu8ll) C1{ Fs:7 Fi:1 FL:8}



static void Test_BFu7s_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu8ll, BFu7s_BFu1i_BFu8ll)
//============================================================================


struct  BFu7s_BFu1i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu1i_BFu8s) C1{ Fs:7 Fi:1 Fs:8}



static void Test_BFu7s_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu8s, BFu7s_BFu1i_BFu8s)
//============================================================================


struct  BFu7s_BFu1i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu1i_BFu9i) C1{ Fs:7 Fi:1 Fi:9}



static void Test_BFu7s_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu9i, BFu7s_BFu1i_BFu9i)
//============================================================================


struct  BFu7s_BFu1i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu1i_BFu9ll) C1{ Fs:7 Fi:1 FL:9}



static void Test_BFu7s_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu9ll, BFu7s_BFu1i_BFu9ll)
//============================================================================


struct  BFu7s_BFu1i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu1i_BFu9s) C1{ Fs:7 Fi:1 Fs:9}



static void Test_BFu7s_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_BFu9s, BFu7s_BFu1i_BFu9s)
//============================================================================


struct  BFu7s_BFu1i_C  {
  unsigned short v1:7;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu7s_BFu1i_C) C1{ Fs:7 Fi:1 Fc}



static void Test_BFu7s_BFu1i_C()
{
  {
    init_simple_test("BFu7s_BFu1i_C");
    static STRUCT_IF_C BFu7s_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_C");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_C, BFu7s_BFu1i_C)
//============================================================================


struct  BFu7s_BFu1i_D  {
  unsigned short v1:7;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu7s_BFu1i_D) C1{ Fs:7 Fi:1 FL}



static void Test_BFu7s_BFu1i_D()
{
  {
    init_simple_test("BFu7s_BFu1i_D");
    static STRUCT_IF_C BFu7s_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_D, BFu7s_BFu1i_D)
//============================================================================


struct  BFu7s_BFu1i_F  {
  unsigned short v1:7;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu7s_BFu1i_F) C1{ Fs:7 Fi:1 Fi}



static void Test_BFu7s_BFu1i_F()
{
  {
    init_simple_test("BFu7s_BFu1i_F");
    static STRUCT_IF_C BFu7s_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_F, BFu7s_BFu1i_F)
//============================================================================


struct  BFu7s_BFu1i_I  {
  unsigned short v1:7;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu7s_BFu1i_I) C1{ Fs:7 Fi:1 Fi}



static void Test_BFu7s_BFu1i_I()
{
  {
    init_simple_test("BFu7s_BFu1i_I");
    static STRUCT_IF_C BFu7s_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_I, BFu7s_BFu1i_I)
//============================================================================


struct  BFu7s_BFu1i_Ip  {
  unsigned short v1:7;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu7s_BFu1i_Ip) C1{ Fs:7 Fi:1 Fp}



static void Test_BFu7s_BFu1i_Ip()
{
  {
    init_simple_test("BFu7s_BFu1i_Ip");
    static STRUCT_IF_C BFu7s_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Ip, BFu7s_BFu1i_Ip)
//============================================================================


struct  BFu7s_BFu1i_L  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu1i_L) C1{ Fs:7 Fi:1 FL}



static void Test_BFu7s_BFu1i_L()
{
  {
    init_simple_test("BFu7s_BFu1i_L");
    static STRUCT_IF_C BFu7s_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_L, BFu7s_BFu1i_L)
//============================================================================


struct  BFu7s_BFu1i_S  {
  unsigned short v1:7;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu7s_BFu1i_S) C1{ Fs:7 Fi:1 Fs}



static void Test_BFu7s_BFu1i_S()
{
  {
    init_simple_test("BFu7s_BFu1i_S");
    static STRUCT_IF_C BFu7s_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_S, BFu7s_BFu1i_S)
//============================================================================


struct  BFu7s_BFu1i_Uc  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu1i_Uc) C1{ Fs:7 Fi:1 Fc}



static void Test_BFu7s_BFu1i_Uc()
{
  {
    init_simple_test("BFu7s_BFu1i_Uc");
    static STRUCT_IF_C BFu7s_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Uc");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Uc, BFu7s_BFu1i_Uc)
//============================================================================


struct  BFu7s_BFu1i_Ui  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu1i_Ui) C1{ Fs:7 Fi:1 Fi}



static void Test_BFu7s_BFu1i_Ui()
{
  {
    init_simple_test("BFu7s_BFu1i_Ui");
    static STRUCT_IF_C BFu7s_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Ui, BFu7s_BFu1i_Ui)
//============================================================================


struct  BFu7s_BFu1i_Ul  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu1i_Ul) C1{ Fs:7 Fi:1 FL}



static void Test_BFu7s_BFu1i_Ul()
{
  {
    init_simple_test("BFu7s_BFu1i_Ul");
    static STRUCT_IF_C BFu7s_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Ul, BFu7s_BFu1i_Ul)
//============================================================================


struct  BFu7s_BFu1i_Us  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu1i_Us) C1{ Fs:7 Fi:1 Fs}



static void Test_BFu7s_BFu1i_Us()
{
  {
    init_simple_test("BFu7s_BFu1i_Us");
    static STRUCT_IF_C BFu7s_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Us, BFu7s_BFu1i_Us)
//============================================================================


struct  BFu7s_BFu1i_Vp  {
  unsigned short v1:7;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu7s_BFu1i_Vp) C1{ Fs:7 Fi:1 Fp}



static void Test_BFu7s_BFu1i_Vp()
{
  {
    init_simple_test("BFu7s_BFu1i_Vp");
    static STRUCT_IF_C BFu7s_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1i_Vp, BFu7s_BFu1i_Vp)
//============================================================================


struct  BFu7s_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu7s_BFu1ll) C1{ Fs:7 FL:1}



static void Test_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll, BFu7s_BFu1ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu1ll_BFu15i) C1{ Fs:7 FL:1 Fi:15}



static void Test_BFu7s_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu15i, BFu7s_BFu1ll_BFu15i)
//============================================================================


struct  BFu7s_BFu1ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu1ll_BFu15ll) C1{ Fs:7 FL:1 FL:15}



static void Test_BFu7s_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu15ll, BFu7s_BFu1ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu1ll_BFu15s) C1{ Fs:7 FL:1 Fs:15}



static void Test_BFu7s_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu15s, BFu7s_BFu1ll_BFu15s)
//============================================================================


struct  BFu7s_BFu1ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu1ll_BFu16i) C1{ Fs:7 FL:1 Fi:16}



static void Test_BFu7s_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu16i, BFu7s_BFu1ll_BFu16i)
//============================================================================


struct  BFu7s_BFu1ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu1ll_BFu16ll) C1{ Fs:7 FL:1 FL:16}



static void Test_BFu7s_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu16ll, BFu7s_BFu1ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu1ll_BFu16s) C1{ Fs:7 FL:1 Fs:16}



static void Test_BFu7s_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu16s, BFu7s_BFu1ll_BFu16s)
//============================================================================


struct  BFu7s_BFu1ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu1ll_BFu17i) C1{ Fs:7 FL:1 Fi:17}



static void Test_BFu7s_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu17i, BFu7s_BFu1ll_BFu17i)
//============================================================================


struct  BFu7s_BFu1ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu1ll_BFu17ll) C1{ Fs:7 FL:1 FL:17}



static void Test_BFu7s_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu17ll, BFu7s_BFu1ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu1ll_BFu1c) C1{ Fs:7 FL:1 Fc:1}



static void Test_BFu7s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu1c, BFu7s_BFu1ll_BFu1c)
//============================================================================


struct  BFu7s_BFu1ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu1ll_BFu1i) C1{ Fs:7 FL:1 Fi:1}



static void Test_BFu7s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu1i, BFu7s_BFu1ll_BFu1i)
//============================================================================


struct  BFu7s_BFu1ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu1ll_BFu1ll) C1{ Fs:7 FL:1 FL:1}



static void Test_BFu7s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu1ll, BFu7s_BFu1ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu1ll_BFu1s) C1{ Fs:7 FL:1 Fs:1}



static void Test_BFu7s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu1s, BFu7s_BFu1ll_BFu1s)
//============================================================================


struct  BFu7s_BFu1ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu1ll_BFu31i) C1{ Fs:7 FL:1 Fi:31}



static void Test_BFu7s_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu31i, BFu7s_BFu1ll_BFu31i)
//============================================================================


struct  BFu7s_BFu1ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu1ll_BFu31ll) C1{ Fs:7 FL:1 FL:31}



static void Test_BFu7s_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu31ll, BFu7s_BFu1ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu1ll_BFu32i) C1{ Fs:7 FL:1 Fi:32}



static void Test_BFu7s_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu32i, BFu7s_BFu1ll_BFu32i)
//============================================================================


struct  BFu7s_BFu1ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu1ll_BFu32ll) C1{ Fs:7 FL:1 FL:32}



static void Test_BFu7s_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu32ll, BFu7s_BFu1ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu1ll_BFu33) C1{ Fs:7 FL:1 FL:33}



static void Test_BFu7s_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu33, BFu7s_BFu1ll_BFu33)
//============================================================================


struct  BFu7s_BFu1ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu1ll_BFu7c) C1{ Fs:7 FL:1 Fc:7}



static void Test_BFu7s_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu7c, BFu7s_BFu1ll_BFu7c)
//============================================================================


struct  BFu7s_BFu1ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu1ll_BFu7i) C1{ Fs:7 FL:1 Fi:7}



static void Test_BFu7s_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu7i, BFu7s_BFu1ll_BFu7i)
//============================================================================


struct  BFu7s_BFu1ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu1ll_BFu7ll) C1{ Fs:7 FL:1 FL:7}



static void Test_BFu7s_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu7ll, BFu7s_BFu1ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu1ll_BFu7s) C1{ Fs:7 FL:1 Fs:7}



static void Test_BFu7s_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu7s, BFu7s_BFu1ll_BFu7s)
//============================================================================


struct  BFu7s_BFu1ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu1ll_BFu8c) C1{ Fs:7 FL:1 Fc:8}



static void Test_BFu7s_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu8c, BFu7s_BFu1ll_BFu8c)
//============================================================================


struct  BFu7s_BFu1ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu1ll_BFu8i) C1{ Fs:7 FL:1 Fi:8}



static void Test_BFu7s_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu8i, BFu7s_BFu1ll_BFu8i)
//============================================================================


struct  BFu7s_BFu1ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu1ll_BFu8ll) C1{ Fs:7 FL:1 FL:8}



static void Test_BFu7s_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu8ll, BFu7s_BFu1ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu1ll_BFu8s) C1{ Fs:7 FL:1 Fs:8}



static void Test_BFu7s_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu8s, BFu7s_BFu1ll_BFu8s)
//============================================================================


struct  BFu7s_BFu1ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu1ll_BFu9i) C1{ Fs:7 FL:1 Fi:9}



static void Test_BFu7s_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu9i, BFu7s_BFu1ll_BFu9i)
//============================================================================


struct  BFu7s_BFu1ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu1ll_BFu9ll) C1{ Fs:7 FL:1 FL:9}



static void Test_BFu7s_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu9ll, BFu7s_BFu1ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu1ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu1ll_BFu9s) C1{ Fs:7 FL:1 Fs:9}



static void Test_BFu7s_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_BFu9s, BFu7s_BFu1ll_BFu9s)
//============================================================================


struct  BFu7s_BFu1ll_C  {
  unsigned short v1:7;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu7s_BFu1ll_C) C1{ Fs:7 FL:1 Fc}



static void Test_BFu7s_BFu1ll_C()
{
  {
    init_simple_test("BFu7s_BFu1ll_C");
    static STRUCT_IF_C BFu7s_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_C");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_C, BFu7s_BFu1ll_C)
//============================================================================


struct  BFu7s_BFu1ll_D  {
  unsigned short v1:7;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu7s_BFu1ll_D) C1{ Fs:7 FL:1 FL}



static void Test_BFu7s_BFu1ll_D()
{
  {
    init_simple_test("BFu7s_BFu1ll_D");
    static STRUCT_IF_C BFu7s_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_D, BFu7s_BFu1ll_D)
//============================================================================


struct  BFu7s_BFu1ll_F  {
  unsigned short v1:7;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu7s_BFu1ll_F) C1{ Fs:7 FL:1 Fi}



static void Test_BFu7s_BFu1ll_F()
{
  {
    init_simple_test("BFu7s_BFu1ll_F");
    static STRUCT_IF_C BFu7s_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_F, BFu7s_BFu1ll_F)
//============================================================================


struct  BFu7s_BFu1ll_I  {
  unsigned short v1:7;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu7s_BFu1ll_I) C1{ Fs:7 FL:1 Fi}



static void Test_BFu7s_BFu1ll_I()
{
  {
    init_simple_test("BFu7s_BFu1ll_I");
    static STRUCT_IF_C BFu7s_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_I, BFu7s_BFu1ll_I)
//============================================================================


struct  BFu7s_BFu1ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu7s_BFu1ll_Ip) C1{ Fs:7 FL:1 Fp}



static void Test_BFu7s_BFu1ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu1ll_Ip");
    static STRUCT_IF_C BFu7s_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Ip, BFu7s_BFu1ll_Ip)
//============================================================================


struct  BFu7s_BFu1ll_L  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu1ll_L) C1{ Fs:7 FL:1 FL}



static void Test_BFu7s_BFu1ll_L()
{
  {
    init_simple_test("BFu7s_BFu1ll_L");
    static STRUCT_IF_C BFu7s_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_L, BFu7s_BFu1ll_L)
//============================================================================


struct  BFu7s_BFu1ll_S  {
  unsigned short v1:7;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu7s_BFu1ll_S) C1{ Fs:7 FL:1 Fs}



static void Test_BFu7s_BFu1ll_S()
{
  {
    init_simple_test("BFu7s_BFu1ll_S");
    static STRUCT_IF_C BFu7s_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_S, BFu7s_BFu1ll_S)
//============================================================================


struct  BFu7s_BFu1ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu1ll_Uc) C1{ Fs:7 FL:1 Fc}



static void Test_BFu7s_BFu1ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu1ll_Uc");
    static STRUCT_IF_C BFu7s_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Uc");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Uc, BFu7s_BFu1ll_Uc)
//============================================================================


struct  BFu7s_BFu1ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu1ll_Ui) C1{ Fs:7 FL:1 Fi}



static void Test_BFu7s_BFu1ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu1ll_Ui");
    static STRUCT_IF_C BFu7s_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Ui, BFu7s_BFu1ll_Ui)
//============================================================================


struct  BFu7s_BFu1ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu1ll_Ul) C1{ Fs:7 FL:1 FL}



static void Test_BFu7s_BFu1ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu1ll_Ul");
    static STRUCT_IF_C BFu7s_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Ul, BFu7s_BFu1ll_Ul)
//============================================================================


struct  BFu7s_BFu1ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu1ll_Us) C1{ Fs:7 FL:1 Fs}



static void Test_BFu7s_BFu1ll_Us()
{
  {
    init_simple_test("BFu7s_BFu1ll_Us");
    static STRUCT_IF_C BFu7s_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Us, BFu7s_BFu1ll_Us)
//============================================================================


struct  BFu7s_BFu1ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu7s_BFu1ll_Vp) C1{ Fs:7 FL:1 Fp}



static void Test_BFu7s_BFu1ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu1ll_Vp");
    static STRUCT_IF_C BFu7s_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1ll_Vp, BFu7s_BFu1ll_Vp)
//============================================================================


struct  BFu7s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu7s_BFu1s) C1{ Fs:7 Fs:1}



static void Test_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s, BFu7s_BFu1s)
//============================================================================


struct  BFu7s_BFu1s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu1s_BFu15i) C1{ Fs:7 Fs:1 Fi:15}



static void Test_BFu7s_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu15i, BFu7s_BFu1s_BFu15i)
//============================================================================


struct  BFu7s_BFu1s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu1s_BFu15ll) C1{ Fs:7 Fs:1 FL:15}



static void Test_BFu7s_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu15ll, BFu7s_BFu1s_BFu15ll)
//============================================================================


struct  BFu7s_BFu1s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu1s_BFu15s) C1{ Fs:7 Fs:1 Fs:15}



static void Test_BFu7s_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu15s, BFu7s_BFu1s_BFu15s)
//============================================================================


struct  BFu7s_BFu1s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu1s_BFu16i) C1{ Fs:7 Fs:1 Fi:16}



static void Test_BFu7s_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu16i, BFu7s_BFu1s_BFu16i)
//============================================================================


struct  BFu7s_BFu1s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu1s_BFu16ll) C1{ Fs:7 Fs:1 FL:16}



static void Test_BFu7s_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu16ll, BFu7s_BFu1s_BFu16ll)
//============================================================================


struct  BFu7s_BFu1s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu1s_BFu16s) C1{ Fs:7 Fs:1 Fs:16}



static void Test_BFu7s_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu16s, BFu7s_BFu1s_BFu16s)
//============================================================================


struct  BFu7s_BFu1s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu1s_BFu17i) C1{ Fs:7 Fs:1 Fi:17}



static void Test_BFu7s_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu17i, BFu7s_BFu1s_BFu17i)
//============================================================================


struct  BFu7s_BFu1s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu1s_BFu17ll) C1{ Fs:7 Fs:1 FL:17}



static void Test_BFu7s_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu17ll, BFu7s_BFu1s_BFu17ll)
//============================================================================


struct  BFu7s_BFu1s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu1s_BFu1c) C1{ Fs:7 Fs:1 Fc:1}



static void Test_BFu7s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu1c, BFu7s_BFu1s_BFu1c)
//============================================================================


struct  BFu7s_BFu1s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu1s_BFu1i) C1{ Fs:7 Fs:1 Fi:1}



static void Test_BFu7s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu1i, BFu7s_BFu1s_BFu1i)
//============================================================================


struct  BFu7s_BFu1s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu1s_BFu1ll) C1{ Fs:7 Fs:1 FL:1}



static void Test_BFu7s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu1ll, BFu7s_BFu1s_BFu1ll)
//============================================================================


struct  BFu7s_BFu1s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu1s_BFu1s) C1{ Fs:7 Fs:1 Fs:1}



static void Test_BFu7s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu1s, BFu7s_BFu1s_BFu1s)
//============================================================================


struct  BFu7s_BFu1s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu1s_BFu31i) C1{ Fs:7 Fs:1 Fi:31}



static void Test_BFu7s_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu31i, BFu7s_BFu1s_BFu31i)
//============================================================================


struct  BFu7s_BFu1s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu1s_BFu31ll) C1{ Fs:7 Fs:1 FL:31}



static void Test_BFu7s_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu31ll, BFu7s_BFu1s_BFu31ll)
//============================================================================


struct  BFu7s_BFu1s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu1s_BFu32i) C1{ Fs:7 Fs:1 Fi:32}



static void Test_BFu7s_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu32i, BFu7s_BFu1s_BFu32i)
//============================================================================


struct  BFu7s_BFu1s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu1s_BFu32ll) C1{ Fs:7 Fs:1 FL:32}



static void Test_BFu7s_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu32ll, BFu7s_BFu1s_BFu32ll)
//============================================================================


struct  BFu7s_BFu1s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu1s_BFu33) C1{ Fs:7 Fs:1 FL:33}



static void Test_BFu7s_BFu1s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu33");
    static STRUCT_IF_C BFu7s_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu33, BFu7s_BFu1s_BFu33)
//============================================================================


struct  BFu7s_BFu1s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu1s_BFu7c) C1{ Fs:7 Fs:1 Fc:7}



static void Test_BFu7s_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu7c, BFu7s_BFu1s_BFu7c)
//============================================================================


struct  BFu7s_BFu1s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu1s_BFu7i) C1{ Fs:7 Fs:1 Fi:7}



static void Test_BFu7s_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu7i, BFu7s_BFu1s_BFu7i)
//============================================================================


struct  BFu7s_BFu1s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu1s_BFu7ll) C1{ Fs:7 Fs:1 FL:7}



static void Test_BFu7s_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu7ll, BFu7s_BFu1s_BFu7ll)
//============================================================================


struct  BFu7s_BFu1s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu1s_BFu7s) C1{ Fs:7 Fs:1 Fs:7}



static void Test_BFu7s_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu7s, BFu7s_BFu1s_BFu7s)
//============================================================================


struct  BFu7s_BFu1s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu1s_BFu8c) C1{ Fs:7 Fs:1 Fc:8}



static void Test_BFu7s_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu1s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu8c, BFu7s_BFu1s_BFu8c)
//============================================================================


struct  BFu7s_BFu1s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu1s_BFu8i) C1{ Fs:7 Fs:1 Fi:8}



static void Test_BFu7s_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu8i, BFu7s_BFu1s_BFu8i)
//============================================================================


struct  BFu7s_BFu1s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu1s_BFu8ll) C1{ Fs:7 Fs:1 FL:8}



static void Test_BFu7s_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu8ll, BFu7s_BFu1s_BFu8ll)
//============================================================================


struct  BFu7s_BFu1s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu1s_BFu8s) C1{ Fs:7 Fs:1 Fs:8}



static void Test_BFu7s_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu8s, BFu7s_BFu1s_BFu8s)
//============================================================================


struct  BFu7s_BFu1s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu1s_BFu9i) C1{ Fs:7 Fs:1 Fi:9}



static void Test_BFu7s_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu9i, BFu7s_BFu1s_BFu9i)
//============================================================================


struct  BFu7s_BFu1s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu1s_BFu9ll) C1{ Fs:7 Fs:1 FL:9}



static void Test_BFu7s_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu9ll, BFu7s_BFu1s_BFu9ll)
//============================================================================


struct  BFu7s_BFu1s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu1s_BFu9s) C1{ Fs:7 Fs:1 Fs:9}



static void Test_BFu7s_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_BFu9s, BFu7s_BFu1s_BFu9s)
//============================================================================


struct  BFu7s_BFu1s_C  {
  unsigned short v1:7;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu7s_BFu1s_C) C1{ Fs:7 Fs:1 Fc}



static void Test_BFu7s_BFu1s_C()
{
  {
    init_simple_test("BFu7s_BFu1s_C");
    static STRUCT_IF_C BFu7s_BFu1s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_C");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_C, BFu7s_BFu1s_C)
//============================================================================


struct  BFu7s_BFu1s_D  {
  unsigned short v1:7;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu7s_BFu1s_D) C1{ Fs:7 Fs:1 FL}



static void Test_BFu7s_BFu1s_D()
{
  {
    init_simple_test("BFu7s_BFu1s_D");
    static STRUCT_IF_C BFu7s_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_D, BFu7s_BFu1s_D)
//============================================================================


struct  BFu7s_BFu1s_F  {
  unsigned short v1:7;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu7s_BFu1s_F) C1{ Fs:7 Fs:1 Fi}



static void Test_BFu7s_BFu1s_F()
{
  {
    init_simple_test("BFu7s_BFu1s_F");
    static STRUCT_IF_C BFu7s_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_F, BFu7s_BFu1s_F)
//============================================================================


struct  BFu7s_BFu1s_I  {
  unsigned short v1:7;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu7s_BFu1s_I) C1{ Fs:7 Fs:1 Fi}



static void Test_BFu7s_BFu1s_I()
{
  {
    init_simple_test("BFu7s_BFu1s_I");
    static STRUCT_IF_C BFu7s_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_I, BFu7s_BFu1s_I)
//============================================================================


struct  BFu7s_BFu1s_Ip  {
  unsigned short v1:7;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu7s_BFu1s_Ip) C1{ Fs:7 Fs:1 Fp}



static void Test_BFu7s_BFu1s_Ip()
{
  {
    init_simple_test("BFu7s_BFu1s_Ip");
    static STRUCT_IF_C BFu7s_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Ip, BFu7s_BFu1s_Ip)
//============================================================================


struct  BFu7s_BFu1s_L  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu1s_L) C1{ Fs:7 Fs:1 FL}



static void Test_BFu7s_BFu1s_L()
{
  {
    init_simple_test("BFu7s_BFu1s_L");
    static STRUCT_IF_C BFu7s_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_L, BFu7s_BFu1s_L)
//============================================================================


struct  BFu7s_BFu1s_S  {
  unsigned short v1:7;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu7s_BFu1s_S) C1{ Fs:7 Fs:1 Fs}



static void Test_BFu7s_BFu1s_S()
{
  {
    init_simple_test("BFu7s_BFu1s_S");
    static STRUCT_IF_C BFu7s_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_S, BFu7s_BFu1s_S)
//============================================================================


struct  BFu7s_BFu1s_Uc  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu1s_Uc) C1{ Fs:7 Fs:1 Fc}



static void Test_BFu7s_BFu1s_Uc()
{
  {
    init_simple_test("BFu7s_BFu1s_Uc");
    static STRUCT_IF_C BFu7s_BFu1s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Uc");
    check_field_offset(lv, v3, 1, "BFu7s_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Uc, BFu7s_BFu1s_Uc)
//============================================================================


struct  BFu7s_BFu1s_Ui  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu1s_Ui) C1{ Fs:7 Fs:1 Fi}



static void Test_BFu7s_BFu1s_Ui()
{
  {
    init_simple_test("BFu7s_BFu1s_Ui");
    static STRUCT_IF_C BFu7s_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Ui, BFu7s_BFu1s_Ui)
//============================================================================


struct  BFu7s_BFu1s_Ul  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu1s_Ul) C1{ Fs:7 Fs:1 FL}



static void Test_BFu7s_BFu1s_Ul()
{
  {
    init_simple_test("BFu7s_BFu1s_Ul");
    static STRUCT_IF_C BFu7s_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Ul, BFu7s_BFu1s_Ul)
//============================================================================


struct  BFu7s_BFu1s_Us  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu1s_Us) C1{ Fs:7 Fs:1 Fs}



static void Test_BFu7s_BFu1s_Us()
{
  {
    init_simple_test("BFu7s_BFu1s_Us");
    static STRUCT_IF_C BFu7s_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Us, BFu7s_BFu1s_Us)
//============================================================================


struct  BFu7s_BFu1s_Vp  {
  unsigned short v1:7;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu7s_BFu1s_Vp) C1{ Fs:7 Fs:1 Fp}



static void Test_BFu7s_BFu1s_Vp()
{
  {
    init_simple_test("BFu7s_BFu1s_Vp");
    static STRUCT_IF_C BFu7s_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu1s_Vp, BFu7s_BFu1s_Vp)
//============================================================================


struct  BFu7s_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu7s_BFu31i) C1{ Fs:7 Fi:31}



static void Test_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i, BFu7s_BFu31i)
//============================================================================


struct  BFu7s_BFu31i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu31i_BFu15i) C1{ Fs:7 Fi:31 Fi:15}



static void Test_BFu7s_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu15i, BFu7s_BFu31i_BFu15i)
//============================================================================


struct  BFu7s_BFu31i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu31i_BFu15ll) C1{ Fs:7 Fi:31 FL:15}



static void Test_BFu7s_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu7s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu7s_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu15ll, BFu7s_BFu31i_BFu15ll)
//============================================================================


struct  BFu7s_BFu31i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu31i_BFu15s) C1{ Fs:7 Fi:31 Fs:15}



static void Test_BFu7s_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu15s, BFu7s_BFu31i_BFu15s)
//============================================================================


struct  BFu7s_BFu31i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu31i_BFu16i) C1{ Fs:7 Fi:31 Fi:16}



static void Test_BFu7s_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu16i, BFu7s_BFu31i_BFu16i)
//============================================================================


struct  BFu7s_BFu31i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu31i_BFu16ll) C1{ Fs:7 Fi:31 FL:16}



static void Test_BFu7s_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu7s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu7s_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu16ll, BFu7s_BFu31i_BFu16ll)
//============================================================================


struct  BFu7s_BFu31i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu31i_BFu16s) C1{ Fs:7 Fi:31 Fs:16}



static void Test_BFu7s_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu16s, BFu7s_BFu31i_BFu16s)
//============================================================================


struct  BFu7s_BFu31i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu31i_BFu17i) C1{ Fs:7 Fi:31 Fi:17}



static void Test_BFu7s_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu17i, BFu7s_BFu31i_BFu17i)
//============================================================================


struct  BFu7s_BFu31i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu31i_BFu17ll) C1{ Fs:7 Fi:31 FL:17}



static void Test_BFu7s_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu7s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu7s_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu17ll, BFu7s_BFu31i_BFu17ll)
//============================================================================


struct  BFu7s_BFu31i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu31i_BFu1c) C1{ Fs:7 Fi:31 Fc:1}



static void Test_BFu7s_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7s_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu1c, BFu7s_BFu31i_BFu1c)
//============================================================================


struct  BFu7s_BFu31i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu31i_BFu1i) C1{ Fs:7 Fi:31 Fi:1}



static void Test_BFu7s_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7s_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu1i, BFu7s_BFu31i_BFu1i)
//============================================================================


struct  BFu7s_BFu31i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu31i_BFu1ll) C1{ Fs:7 Fi:31 FL:1}



static void Test_BFu7s_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7s_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu1ll, BFu7s_BFu31i_BFu1ll)
//============================================================================


struct  BFu7s_BFu31i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu31i_BFu1s) C1{ Fs:7 Fi:31 Fs:1}



static void Test_BFu7s_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7s_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu1s, BFu7s_BFu31i_BFu1s)
//============================================================================


struct  BFu7s_BFu31i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu31i_BFu31i) C1{ Fs:7 Fi:31 Fi:31}



static void Test_BFu7s_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu31i, BFu7s_BFu31i_BFu31i)
//============================================================================


struct  BFu7s_BFu31i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu31i_BFu31ll) C1{ Fs:7 Fi:31 FL:31}



static void Test_BFu7s_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu7s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu31ll, BFu7s_BFu31i_BFu31ll)
//============================================================================


struct  BFu7s_BFu31i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu31i_BFu32i) C1{ Fs:7 Fi:31 Fi:32}



static void Test_BFu7s_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu32i, BFu7s_BFu31i_BFu32i)
//============================================================================


struct  BFu7s_BFu31i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu31i_BFu32ll) C1{ Fs:7 Fi:31 FL:32}



static void Test_BFu7s_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu7s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7s_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu32ll, BFu7s_BFu31i_BFu32ll)
//============================================================================


struct  BFu7s_BFu31i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu31i_BFu33) C1{ Fs:7 Fi:31 FL:33}



static void Test_BFu7s_BFu31i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu33");
    static STRUCT_IF_C BFu7s_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu7s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7s_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu33, BFu7s_BFu31i_BFu33)
//============================================================================


struct  BFu7s_BFu31i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu31i_BFu7c) C1{ Fs:7 Fi:31 Fc:7}



static void Test_BFu7s_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu7c, BFu7s_BFu31i_BFu7c)
//============================================================================


struct  BFu7s_BFu31i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu31i_BFu7i) C1{ Fs:7 Fi:31 Fi:7}



static void Test_BFu7s_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu7i, BFu7s_BFu31i_BFu7i)
//============================================================================


struct  BFu7s_BFu31i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu31i_BFu7ll) C1{ Fs:7 Fi:31 FL:7}



static void Test_BFu7s_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu7s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu7ll, BFu7s_BFu31i_BFu7ll)
//============================================================================


struct  BFu7s_BFu31i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu31i_BFu7s) C1{ Fs:7 Fi:31 Fs:7}



static void Test_BFu7s_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu7s, BFu7s_BFu31i_BFu7s)
//============================================================================


struct  BFu7s_BFu31i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu31i_BFu8c) C1{ Fs:7 Fi:31 Fc:8}



static void Test_BFu7s_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu8c, BFu7s_BFu31i_BFu8c)
//============================================================================


struct  BFu7s_BFu31i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu31i_BFu8i) C1{ Fs:7 Fi:31 Fi:8}



static void Test_BFu7s_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu8i, BFu7s_BFu31i_BFu8i)
//============================================================================


struct  BFu7s_BFu31i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu31i_BFu8ll) C1{ Fs:7 Fi:31 FL:8}



static void Test_BFu7s_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu7s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu7s_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu8ll, BFu7s_BFu31i_BFu8ll)
//============================================================================


struct  BFu7s_BFu31i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu31i_BFu8s) C1{ Fs:7 Fi:31 Fs:8}



static void Test_BFu7s_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu8s, BFu7s_BFu31i_BFu8s)
//============================================================================


struct  BFu7s_BFu31i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu31i_BFu9i) C1{ Fs:7 Fi:31 Fi:9}



static void Test_BFu7s_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu9i, BFu7s_BFu31i_BFu9i)
//============================================================================


struct  BFu7s_BFu31i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu31i_BFu9ll) C1{ Fs:7 Fi:31 FL:9}



static void Test_BFu7s_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu7s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu7s_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu9ll, BFu7s_BFu31i_BFu9ll)
//============================================================================


struct  BFu7s_BFu31i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu31i_BFu9s) C1{ Fs:7 Fi:31 Fs:9}



static void Test_BFu7s_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_BFu9s, BFu7s_BFu31i_BFu9s)
//============================================================================


struct  BFu7s_BFu31i_C  {
  unsigned short v1:7;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu7s_BFu31i_C) C1{ Fs:7 Fi:31 Fc}



static void Test_BFu7s_BFu31i_C()
{
  {
    init_simple_test("BFu7s_BFu31i_C");
    static STRUCT_IF_C BFu7s_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_C, BFu7s_BFu31i_C)
//============================================================================


struct  BFu7s_BFu31i_D  {
  unsigned short v1:7;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu7s_BFu31i_D) C1{ Fs:7 Fi:31 FL}



static void Test_BFu7s_BFu31i_D()
{
  {
    init_simple_test("BFu7s_BFu31i_D");
    static STRUCT_IF_C BFu7s_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_D, BFu7s_BFu31i_D)
//============================================================================


struct  BFu7s_BFu31i_F  {
  unsigned short v1:7;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu7s_BFu31i_F) C1{ Fs:7 Fi:31 Fi}



static void Test_BFu7s_BFu31i_F()
{
  {
    init_simple_test("BFu7s_BFu31i_F");
    static STRUCT_IF_C BFu7s_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_F, BFu7s_BFu31i_F)
//============================================================================


struct  BFu7s_BFu31i_I  {
  unsigned short v1:7;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu7s_BFu31i_I) C1{ Fs:7 Fi:31 Fi}



static void Test_BFu7s_BFu31i_I()
{
  {
    init_simple_test("BFu7s_BFu31i_I");
    static STRUCT_IF_C BFu7s_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_I, BFu7s_BFu31i_I)
//============================================================================


struct  BFu7s_BFu31i_Ip  {
  unsigned short v1:7;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu7s_BFu31i_Ip) C1{ Fs:7 Fi:31 Fp}



static void Test_BFu7s_BFu31i_Ip()
{
  {
    init_simple_test("BFu7s_BFu31i_Ip");
    static STRUCT_IF_C BFu7s_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Ip, BFu7s_BFu31i_Ip)
//============================================================================


struct  BFu7s_BFu31i_L  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu31i_L) C1{ Fs:7 Fi:31 FL}



static void Test_BFu7s_BFu31i_L()
{
  {
    init_simple_test("BFu7s_BFu31i_L");
    static STRUCT_IF_C BFu7s_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_L, BFu7s_BFu31i_L)
//============================================================================


struct  BFu7s_BFu31i_S  {
  unsigned short v1:7;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu7s_BFu31i_S) C1{ Fs:7 Fi:31 Fs}



static void Test_BFu7s_BFu31i_S()
{
  {
    init_simple_test("BFu7s_BFu31i_S");
    static STRUCT_IF_C BFu7s_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_S, BFu7s_BFu31i_S)
//============================================================================


struct  BFu7s_BFu31i_Uc  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu31i_Uc) C1{ Fs:7 Fi:31 Fc}



static void Test_BFu7s_BFu31i_Uc()
{
  {
    init_simple_test("BFu7s_BFu31i_Uc");
    static STRUCT_IF_C BFu7s_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Uc, BFu7s_BFu31i_Uc)
//============================================================================


struct  BFu7s_BFu31i_Ui  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu31i_Ui) C1{ Fs:7 Fi:31 Fi}



static void Test_BFu7s_BFu31i_Ui()
{
  {
    init_simple_test("BFu7s_BFu31i_Ui");
    static STRUCT_IF_C BFu7s_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Ui, BFu7s_BFu31i_Ui)
//============================================================================


struct  BFu7s_BFu31i_Ul  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu31i_Ul) C1{ Fs:7 Fi:31 FL}



static void Test_BFu7s_BFu31i_Ul()
{
  {
    init_simple_test("BFu7s_BFu31i_Ul");
    static STRUCT_IF_C BFu7s_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Ul, BFu7s_BFu31i_Ul)
//============================================================================


struct  BFu7s_BFu31i_Us  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu31i_Us) C1{ Fs:7 Fi:31 Fs}



static void Test_BFu7s_BFu31i_Us()
{
  {
    init_simple_test("BFu7s_BFu31i_Us");
    static STRUCT_IF_C BFu7s_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Us, BFu7s_BFu31i_Us)
//============================================================================


struct  BFu7s_BFu31i_Vp  {
  unsigned short v1:7;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu7s_BFu31i_Vp) C1{ Fs:7 Fi:31 Fp}



static void Test_BFu7s_BFu31i_Vp()
{
  {
    init_simple_test("BFu7s_BFu31i_Vp");
    static STRUCT_IF_C BFu7s_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31i_Vp, BFu7s_BFu31i_Vp)
//============================================================================


struct  BFu7s_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu7s_BFu31ll) C1{ Fs:7 FL:31}



static void Test_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll, BFu7s_BFu31ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu31ll_BFu15i) C1{ Fs:7 FL:31 Fi:15}



static void Test_BFu7s_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu15i, BFu7s_BFu31ll_BFu15i)
//============================================================================


struct  BFu7s_BFu31ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu31ll_BFu15ll) C1{ Fs:7 FL:31 FL:15}



static void Test_BFu7s_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu15ll, BFu7s_BFu31ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu31ll_BFu15s) C1{ Fs:7 FL:31 Fs:15}



static void Test_BFu7s_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu15s, BFu7s_BFu31ll_BFu15s)
//============================================================================


struct  BFu7s_BFu31ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu31ll_BFu16i) C1{ Fs:7 FL:31 Fi:16}



static void Test_BFu7s_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu16i, BFu7s_BFu31ll_BFu16i)
//============================================================================


struct  BFu7s_BFu31ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu31ll_BFu16ll) C1{ Fs:7 FL:31 FL:16}



static void Test_BFu7s_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu16ll, BFu7s_BFu31ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu31ll_BFu16s) C1{ Fs:7 FL:31 Fs:16}



static void Test_BFu7s_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu16s, BFu7s_BFu31ll_BFu16s)
//============================================================================


struct  BFu7s_BFu31ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu31ll_BFu17i) C1{ Fs:7 FL:31 Fi:17}



static void Test_BFu7s_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu17i, BFu7s_BFu31ll_BFu17i)
//============================================================================


struct  BFu7s_BFu31ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu31ll_BFu17ll) C1{ Fs:7 FL:31 FL:17}



static void Test_BFu7s_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu17ll, BFu7s_BFu31ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu31ll_BFu1c) C1{ Fs:7 FL:31 Fc:1}



static void Test_BFu7s_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7s_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu1c, BFu7s_BFu31ll_BFu1c)
//============================================================================


struct  BFu7s_BFu31ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu31ll_BFu1i) C1{ Fs:7 FL:31 Fi:1}



static void Test_BFu7s_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7s_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu1i, BFu7s_BFu31ll_BFu1i)
//============================================================================


struct  BFu7s_BFu31ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu31ll_BFu1ll) C1{ Fs:7 FL:31 FL:1}



static void Test_BFu7s_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7s_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu1ll, BFu7s_BFu31ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu31ll_BFu1s) C1{ Fs:7 FL:31 Fs:1}



static void Test_BFu7s_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7s_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu1s, BFu7s_BFu31ll_BFu1s)
//============================================================================


struct  BFu7s_BFu31ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu31ll_BFu31i) C1{ Fs:7 FL:31 Fi:31}



static void Test_BFu7s_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu31i, BFu7s_BFu31ll_BFu31i)
//============================================================================


struct  BFu7s_BFu31ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu31ll_BFu31ll) C1{ Fs:7 FL:31 FL:31}



static void Test_BFu7s_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, 1, "BFu7s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu31ll, BFu7s_BFu31ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu31ll_BFu32i) C1{ Fs:7 FL:31 Fi:32}



static void Test_BFu7s_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu32i, BFu7s_BFu31ll_BFu32i)
//============================================================================


struct  BFu7s_BFu31ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu31ll_BFu32ll) C1{ Fs:7 FL:31 FL:32}



static void Test_BFu7s_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, 1, "BFu7s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu7s_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu32ll, BFu7s_BFu31ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu31ll_BFu33) C1{ Fs:7 FL:31 FL:33}



static void Test_BFu7s_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, 1, "BFu7s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu7s_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu33, BFu7s_BFu31ll_BFu33)
//============================================================================


struct  BFu7s_BFu31ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu31ll_BFu7c) C1{ Fs:7 FL:31 Fc:7}



static void Test_BFu7s_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu7c, BFu7s_BFu31ll_BFu7c)
//============================================================================


struct  BFu7s_BFu31ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu31ll_BFu7i) C1{ Fs:7 FL:31 Fi:7}



static void Test_BFu7s_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu7i, BFu7s_BFu31ll_BFu7i)
//============================================================================


struct  BFu7s_BFu31ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu31ll_BFu7ll) C1{ Fs:7 FL:31 FL:7}



static void Test_BFu7s_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu7ll, BFu7s_BFu31ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu31ll_BFu7s) C1{ Fs:7 FL:31 Fs:7}



static void Test_BFu7s_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu7s, BFu7s_BFu31ll_BFu7s)
//============================================================================


struct  BFu7s_BFu31ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu31ll_BFu8c) C1{ Fs:7 FL:31 Fc:8}



static void Test_BFu7s_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu8c, BFu7s_BFu31ll_BFu8c)
//============================================================================


struct  BFu7s_BFu31ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu31ll_BFu8i) C1{ Fs:7 FL:31 Fi:8}



static void Test_BFu7s_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu8i, BFu7s_BFu31ll_BFu8i)
//============================================================================


struct  BFu7s_BFu31ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu31ll_BFu8ll) C1{ Fs:7 FL:31 FL:8}



static void Test_BFu7s_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu8ll, BFu7s_BFu31ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu31ll_BFu8s) C1{ Fs:7 FL:31 Fs:8}



static void Test_BFu7s_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu8s, BFu7s_BFu31ll_BFu8s)
//============================================================================


struct  BFu7s_BFu31ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu31ll_BFu9i) C1{ Fs:7 FL:31 Fi:9}



static void Test_BFu7s_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu9i, BFu7s_BFu31ll_BFu9i)
//============================================================================


struct  BFu7s_BFu31ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu31ll_BFu9ll) C1{ Fs:7 FL:31 FL:9}



static void Test_BFu7s_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu9ll, BFu7s_BFu31ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu31ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu31ll_BFu9s) C1{ Fs:7 FL:31 Fs:9}



static void Test_BFu7s_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_BFu9s, BFu7s_BFu31ll_BFu9s)
//============================================================================


struct  BFu7s_BFu31ll_C  {
  unsigned short v1:7;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu7s_BFu31ll_C) C1{ Fs:7 FL:31 Fc}



static void Test_BFu7s_BFu31ll_C()
{
  {
    init_simple_test("BFu7s_BFu31ll_C");
    static STRUCT_IF_C BFu7s_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_C");
    check_field_offset(lv, v3, 5, "BFu7s_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_C, BFu7s_BFu31ll_C)
//============================================================================


struct  BFu7s_BFu31ll_D  {
  unsigned short v1:7;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu7s_BFu31ll_D) C1{ Fs:7 FL:31 FL}



static void Test_BFu7s_BFu31ll_D()
{
  {
    init_simple_test("BFu7s_BFu31ll_D");
    static STRUCT_IF_C BFu7s_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_D, BFu7s_BFu31ll_D)
//============================================================================


struct  BFu7s_BFu31ll_F  {
  unsigned short v1:7;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu7s_BFu31ll_F) C1{ Fs:7 FL:31 Fi}



static void Test_BFu7s_BFu31ll_F()
{
  {
    init_simple_test("BFu7s_BFu31ll_F");
    static STRUCT_IF_C BFu7s_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_F, BFu7s_BFu31ll_F)
//============================================================================


struct  BFu7s_BFu31ll_I  {
  unsigned short v1:7;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu7s_BFu31ll_I) C1{ Fs:7 FL:31 Fi}



static void Test_BFu7s_BFu31ll_I()
{
  {
    init_simple_test("BFu7s_BFu31ll_I");
    static STRUCT_IF_C BFu7s_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_I, BFu7s_BFu31ll_I)
//============================================================================


struct  BFu7s_BFu31ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu7s_BFu31ll_Ip) C1{ Fs:7 FL:31 Fp}



static void Test_BFu7s_BFu31ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu31ll_Ip");
    static STRUCT_IF_C BFu7s_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Ip, BFu7s_BFu31ll_Ip)
//============================================================================


struct  BFu7s_BFu31ll_L  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu31ll_L) C1{ Fs:7 FL:31 FL}



static void Test_BFu7s_BFu31ll_L()
{
  {
    init_simple_test("BFu7s_BFu31ll_L");
    static STRUCT_IF_C BFu7s_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_L, BFu7s_BFu31ll_L)
//============================================================================


struct  BFu7s_BFu31ll_S  {
  unsigned short v1:7;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu7s_BFu31ll_S) C1{ Fs:7 FL:31 Fs}



static void Test_BFu7s_BFu31ll_S()
{
  {
    init_simple_test("BFu7s_BFu31ll_S");
    static STRUCT_IF_C BFu7s_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu7s_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_S, BFu7s_BFu31ll_S)
//============================================================================


struct  BFu7s_BFu31ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu31ll_Uc) C1{ Fs:7 FL:31 Fc}



static void Test_BFu7s_BFu31ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu31ll_Uc");
    static STRUCT_IF_C BFu7s_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7s_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Uc, BFu7s_BFu31ll_Uc)
//============================================================================


struct  BFu7s_BFu31ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu31ll_Ui) C1{ Fs:7 FL:31 Fi}



static void Test_BFu7s_BFu31ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu31ll_Ui");
    static STRUCT_IF_C BFu7s_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Ui, BFu7s_BFu31ll_Ui)
//============================================================================


struct  BFu7s_BFu31ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu31ll_Ul) C1{ Fs:7 FL:31 FL}



static void Test_BFu7s_BFu31ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu31ll_Ul");
    static STRUCT_IF_C BFu7s_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Ul, BFu7s_BFu31ll_Ul)
//============================================================================


struct  BFu7s_BFu31ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu31ll_Us) C1{ Fs:7 FL:31 Fs}



static void Test_BFu7s_BFu31ll_Us()
{
  {
    init_simple_test("BFu7s_BFu31ll_Us");
    static STRUCT_IF_C BFu7s_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu7s_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Us, BFu7s_BFu31ll_Us)
//============================================================================


struct  BFu7s_BFu31ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu7s_BFu31ll_Vp) C1{ Fs:7 FL:31 Fp}



static void Test_BFu7s_BFu31ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu31ll_Vp");
    static STRUCT_IF_C BFu7s_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7s_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu31ll_Vp, BFu7s_BFu31ll_Vp)
//============================================================================


struct  BFu7s_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu7s_BFu32i) C1{ Fs:7 Fi:32}



static void Test_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i, BFu7s_BFu32i)
//============================================================================


struct  BFu7s_BFu32i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu32i_BFu15i) C1{ Fs:7 Fi:32 Fi:15}



static void Test_BFu7s_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu15i, BFu7s_BFu32i_BFu15i)
//============================================================================


struct  BFu7s_BFu32i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu32i_BFu15ll) C1{ Fs:7 Fi:32 FL:15}



static void Test_BFu7s_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu15ll, BFu7s_BFu32i_BFu15ll)
//============================================================================


struct  BFu7s_BFu32i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu32i_BFu15s) C1{ Fs:7 Fi:32 Fs:15}



static void Test_BFu7s_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu15s, BFu7s_BFu32i_BFu15s)
//============================================================================


struct  BFu7s_BFu32i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu32i_BFu16i) C1{ Fs:7 Fi:32 Fi:16}



static void Test_BFu7s_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu16i, BFu7s_BFu32i_BFu16i)
//============================================================================


struct  BFu7s_BFu32i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu32i_BFu16ll) C1{ Fs:7 Fi:32 FL:16}



static void Test_BFu7s_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu16ll, BFu7s_BFu32i_BFu16ll)
//============================================================================


struct  BFu7s_BFu32i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu32i_BFu16s) C1{ Fs:7 Fi:32 Fs:16}



static void Test_BFu7s_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu16s, BFu7s_BFu32i_BFu16s)
//============================================================================


struct  BFu7s_BFu32i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu32i_BFu17i) C1{ Fs:7 Fi:32 Fi:17}



static void Test_BFu7s_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu17i, BFu7s_BFu32i_BFu17i)
//============================================================================


struct  BFu7s_BFu32i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu32i_BFu17ll) C1{ Fs:7 Fi:32 FL:17}



static void Test_BFu7s_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu17ll, BFu7s_BFu32i_BFu17ll)
//============================================================================


struct  BFu7s_BFu32i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu32i_BFu1c) C1{ Fs:7 Fi:32 Fc:1}



static void Test_BFu7s_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu1c, BFu7s_BFu32i_BFu1c)
//============================================================================


struct  BFu7s_BFu32i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu32i_BFu1i) C1{ Fs:7 Fi:32 Fi:1}



static void Test_BFu7s_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu1i, BFu7s_BFu32i_BFu1i)
//============================================================================


struct  BFu7s_BFu32i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu32i_BFu1ll) C1{ Fs:7 Fi:32 FL:1}



static void Test_BFu7s_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu1ll, BFu7s_BFu32i_BFu1ll)
//============================================================================


struct  BFu7s_BFu32i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu32i_BFu1s) C1{ Fs:7 Fi:32 Fs:1}



static void Test_BFu7s_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu1s, BFu7s_BFu32i_BFu1s)
//============================================================================


struct  BFu7s_BFu32i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu32i_BFu31i) C1{ Fs:7 Fi:32 Fi:31}



static void Test_BFu7s_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu31i, BFu7s_BFu32i_BFu31i)
//============================================================================


struct  BFu7s_BFu32i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu32i_BFu31ll) C1{ Fs:7 Fi:32 FL:31}



static void Test_BFu7s_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu31ll, BFu7s_BFu32i_BFu31ll)
//============================================================================


struct  BFu7s_BFu32i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu32i_BFu32i) C1{ Fs:7 Fi:32 Fi:32}



static void Test_BFu7s_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu32i, BFu7s_BFu32i_BFu32i)
//============================================================================


struct  BFu7s_BFu32i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu32i_BFu32ll) C1{ Fs:7 Fi:32 FL:32}



static void Test_BFu7s_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu32ll, BFu7s_BFu32i_BFu32ll)
//============================================================================


struct  BFu7s_BFu32i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu32i_BFu33) C1{ Fs:7 Fi:32 FL:33}



static void Test_BFu7s_BFu32i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu33");
    static STRUCT_IF_C BFu7s_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu33, BFu7s_BFu32i_BFu33)
//============================================================================


struct  BFu7s_BFu32i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu32i_BFu7c) C1{ Fs:7 Fi:32 Fc:7}



static void Test_BFu7s_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu7c, BFu7s_BFu32i_BFu7c)
//============================================================================


struct  BFu7s_BFu32i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu32i_BFu7i) C1{ Fs:7 Fi:32 Fi:7}



static void Test_BFu7s_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu7i, BFu7s_BFu32i_BFu7i)
//============================================================================


struct  BFu7s_BFu32i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu32i_BFu7ll) C1{ Fs:7 Fi:32 FL:7}



static void Test_BFu7s_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu7ll, BFu7s_BFu32i_BFu7ll)
//============================================================================


struct  BFu7s_BFu32i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu32i_BFu7s) C1{ Fs:7 Fi:32 Fs:7}



static void Test_BFu7s_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu7s, BFu7s_BFu32i_BFu7s)
//============================================================================


struct  BFu7s_BFu32i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu32i_BFu8c) C1{ Fs:7 Fi:32 Fc:8}



static void Test_BFu7s_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu8c, BFu7s_BFu32i_BFu8c)
//============================================================================


struct  BFu7s_BFu32i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu32i_BFu8i) C1{ Fs:7 Fi:32 Fi:8}



static void Test_BFu7s_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu8i, BFu7s_BFu32i_BFu8i)
//============================================================================


struct  BFu7s_BFu32i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu32i_BFu8ll) C1{ Fs:7 Fi:32 FL:8}



static void Test_BFu7s_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu8ll, BFu7s_BFu32i_BFu8ll)
//============================================================================


struct  BFu7s_BFu32i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu32i_BFu8s) C1{ Fs:7 Fi:32 Fs:8}



static void Test_BFu7s_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu8s, BFu7s_BFu32i_BFu8s)
//============================================================================


struct  BFu7s_BFu32i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu32i_BFu9i) C1{ Fs:7 Fi:32 Fi:9}



static void Test_BFu7s_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu9i, BFu7s_BFu32i_BFu9i)
//============================================================================


struct  BFu7s_BFu32i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu32i_BFu9ll) C1{ Fs:7 Fi:32 FL:9}



static void Test_BFu7s_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu9ll, BFu7s_BFu32i_BFu9ll)
//============================================================================


struct  BFu7s_BFu32i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu32i_BFu9s) C1{ Fs:7 Fi:32 Fs:9}



static void Test_BFu7s_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_BFu9s, BFu7s_BFu32i_BFu9s)
//============================================================================


struct  BFu7s_BFu32i_C  {
  unsigned short v1:7;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu7s_BFu32i_C) C1{ Fs:7 Fi:32 Fc}



static void Test_BFu7s_BFu32i_C()
{
  {
    init_simple_test("BFu7s_BFu32i_C");
    static STRUCT_IF_C BFu7s_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_C, BFu7s_BFu32i_C)
//============================================================================


struct  BFu7s_BFu32i_D  {
  unsigned short v1:7;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu7s_BFu32i_D) C1{ Fs:7 Fi:32 FL}



static void Test_BFu7s_BFu32i_D()
{
  {
    init_simple_test("BFu7s_BFu32i_D");
    static STRUCT_IF_C BFu7s_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_D, BFu7s_BFu32i_D)
//============================================================================


struct  BFu7s_BFu32i_F  {
  unsigned short v1:7;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu7s_BFu32i_F) C1{ Fs:7 Fi:32 Fi}



static void Test_BFu7s_BFu32i_F()
{
  {
    init_simple_test("BFu7s_BFu32i_F");
    static STRUCT_IF_C BFu7s_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_F, BFu7s_BFu32i_F)
//============================================================================


struct  BFu7s_BFu32i_I  {
  unsigned short v1:7;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu7s_BFu32i_I) C1{ Fs:7 Fi:32 Fi}



static void Test_BFu7s_BFu32i_I()
{
  {
    init_simple_test("BFu7s_BFu32i_I");
    static STRUCT_IF_C BFu7s_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_I, BFu7s_BFu32i_I)
//============================================================================


struct  BFu7s_BFu32i_Ip  {
  unsigned short v1:7;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu7s_BFu32i_Ip) C1{ Fs:7 Fi:32 Fp}



static void Test_BFu7s_BFu32i_Ip()
{
  {
    init_simple_test("BFu7s_BFu32i_Ip");
    static STRUCT_IF_C BFu7s_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Ip, BFu7s_BFu32i_Ip)
//============================================================================


struct  BFu7s_BFu32i_L  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu32i_L) C1{ Fs:7 Fi:32 FL}



static void Test_BFu7s_BFu32i_L()
{
  {
    init_simple_test("BFu7s_BFu32i_L");
    static STRUCT_IF_C BFu7s_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_L, BFu7s_BFu32i_L)
//============================================================================


struct  BFu7s_BFu32i_S  {
  unsigned short v1:7;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu7s_BFu32i_S) C1{ Fs:7 Fi:32 Fs}



static void Test_BFu7s_BFu32i_S()
{
  {
    init_simple_test("BFu7s_BFu32i_S");
    static STRUCT_IF_C BFu7s_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_S, BFu7s_BFu32i_S)
//============================================================================


struct  BFu7s_BFu32i_Uc  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu32i_Uc) C1{ Fs:7 Fi:32 Fc}



static void Test_BFu7s_BFu32i_Uc()
{
  {
    init_simple_test("BFu7s_BFu32i_Uc");
    static STRUCT_IF_C BFu7s_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Uc, BFu7s_BFu32i_Uc)
//============================================================================


struct  BFu7s_BFu32i_Ui  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu32i_Ui) C1{ Fs:7 Fi:32 Fi}



static void Test_BFu7s_BFu32i_Ui()
{
  {
    init_simple_test("BFu7s_BFu32i_Ui");
    static STRUCT_IF_C BFu7s_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Ui, BFu7s_BFu32i_Ui)
//============================================================================


struct  BFu7s_BFu32i_Ul  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu32i_Ul) C1{ Fs:7 Fi:32 FL}



static void Test_BFu7s_BFu32i_Ul()
{
  {
    init_simple_test("BFu7s_BFu32i_Ul");
    static STRUCT_IF_C BFu7s_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Ul, BFu7s_BFu32i_Ul)
//============================================================================


struct  BFu7s_BFu32i_Us  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu32i_Us) C1{ Fs:7 Fi:32 Fs}



static void Test_BFu7s_BFu32i_Us()
{
  {
    init_simple_test("BFu7s_BFu32i_Us");
    static STRUCT_IF_C BFu7s_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Us, BFu7s_BFu32i_Us)
//============================================================================


struct  BFu7s_BFu32i_Vp  {
  unsigned short v1:7;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu7s_BFu32i_Vp) C1{ Fs:7 Fi:32 Fp}



static void Test_BFu7s_BFu32i_Vp()
{
  {
    init_simple_test("BFu7s_BFu32i_Vp");
    static STRUCT_IF_C BFu7s_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32i_Vp, BFu7s_BFu32i_Vp)
//============================================================================


struct  BFu7s_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu7s_BFu32ll) C1{ Fs:7 FL:32}



static void Test_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll, BFu7s_BFu32ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu32ll_BFu15i) C1{ Fs:7 FL:32 Fi:15}



static void Test_BFu7s_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu15i, BFu7s_BFu32ll_BFu15i)
//============================================================================


struct  BFu7s_BFu32ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu32ll_BFu15ll) C1{ Fs:7 FL:32 FL:15}



static void Test_BFu7s_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu15ll, BFu7s_BFu32ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu32ll_BFu15s) C1{ Fs:7 FL:32 Fs:15}



static void Test_BFu7s_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu15s, BFu7s_BFu32ll_BFu15s)
//============================================================================


struct  BFu7s_BFu32ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu32ll_BFu16i) C1{ Fs:7 FL:32 Fi:16}



static void Test_BFu7s_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu16i, BFu7s_BFu32ll_BFu16i)
//============================================================================


struct  BFu7s_BFu32ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu32ll_BFu16ll) C1{ Fs:7 FL:32 FL:16}



static void Test_BFu7s_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu16ll, BFu7s_BFu32ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu32ll_BFu16s) C1{ Fs:7 FL:32 Fs:16}



static void Test_BFu7s_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu16s, BFu7s_BFu32ll_BFu16s)
//============================================================================


struct  BFu7s_BFu32ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu32ll_BFu17i) C1{ Fs:7 FL:32 Fi:17}



static void Test_BFu7s_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu17i, BFu7s_BFu32ll_BFu17i)
//============================================================================


struct  BFu7s_BFu32ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu32ll_BFu17ll) C1{ Fs:7 FL:32 FL:17}



static void Test_BFu7s_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu17ll, BFu7s_BFu32ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu32ll_BFu1c) C1{ Fs:7 FL:32 Fc:1}



static void Test_BFu7s_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7s_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu1c, BFu7s_BFu32ll_BFu1c)
//============================================================================


struct  BFu7s_BFu32ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu32ll_BFu1i) C1{ Fs:7 FL:32 Fi:1}



static void Test_BFu7s_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7s_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu1i, BFu7s_BFu32ll_BFu1i)
//============================================================================


struct  BFu7s_BFu32ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu32ll_BFu1ll) C1{ Fs:7 FL:32 FL:1}



static void Test_BFu7s_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7s_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu1ll, BFu7s_BFu32ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu32ll_BFu1s) C1{ Fs:7 FL:32 Fs:1}



static void Test_BFu7s_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7s_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu1s, BFu7s_BFu32ll_BFu1s)
//============================================================================


struct  BFu7s_BFu32ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu32ll_BFu31i) C1{ Fs:7 FL:32 Fi:31}



static void Test_BFu7s_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu31i, BFu7s_BFu32ll_BFu31i)
//============================================================================


struct  BFu7s_BFu32ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu32ll_BFu31ll) C1{ Fs:7 FL:32 FL:31}



static void Test_BFu7s_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu7s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7s_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu31ll, BFu7s_BFu32ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu32ll_BFu32i) C1{ Fs:7 FL:32 Fi:32}



static void Test_BFu7s_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu32i, BFu7s_BFu32ll_BFu32i)
//============================================================================


struct  BFu7s_BFu32ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu32ll_BFu32ll) C1{ Fs:7 FL:32 FL:32}



static void Test_BFu7s_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu7s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu32ll, BFu7s_BFu32ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu32ll_BFu33) C1{ Fs:7 FL:32 FL:33}



static void Test_BFu7s_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu7s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7s_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu33, BFu7s_BFu32ll_BFu33)
//============================================================================


struct  BFu7s_BFu32ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu32ll_BFu7c) C1{ Fs:7 FL:32 Fc:7}



static void Test_BFu7s_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu7c, BFu7s_BFu32ll_BFu7c)
//============================================================================


struct  BFu7s_BFu32ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu32ll_BFu7i) C1{ Fs:7 FL:32 Fi:7}



static void Test_BFu7s_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu7i, BFu7s_BFu32ll_BFu7i)
//============================================================================


struct  BFu7s_BFu32ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu32ll_BFu7ll) C1{ Fs:7 FL:32 FL:7}



static void Test_BFu7s_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu7ll, BFu7s_BFu32ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu32ll_BFu7s) C1{ Fs:7 FL:32 Fs:7}



static void Test_BFu7s_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu7s, BFu7s_BFu32ll_BFu7s)
//============================================================================


struct  BFu7s_BFu32ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu32ll_BFu8c) C1{ Fs:7 FL:32 Fc:8}



static void Test_BFu7s_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu8c, BFu7s_BFu32ll_BFu8c)
//============================================================================


struct  BFu7s_BFu32ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu32ll_BFu8i) C1{ Fs:7 FL:32 Fi:8}



static void Test_BFu7s_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu8i, BFu7s_BFu32ll_BFu8i)
//============================================================================


struct  BFu7s_BFu32ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu32ll_BFu8ll) C1{ Fs:7 FL:32 FL:8}



static void Test_BFu7s_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu8ll, BFu7s_BFu32ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu32ll_BFu8s) C1{ Fs:7 FL:32 Fs:8}



static void Test_BFu7s_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu8s, BFu7s_BFu32ll_BFu8s)
//============================================================================


struct  BFu7s_BFu32ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu32ll_BFu9i) C1{ Fs:7 FL:32 Fi:9}



static void Test_BFu7s_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu9i, BFu7s_BFu32ll_BFu9i)
//============================================================================


struct  BFu7s_BFu32ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu32ll_BFu9ll) C1{ Fs:7 FL:32 FL:9}



static void Test_BFu7s_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu9ll, BFu7s_BFu32ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu32ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu32ll_BFu9s) C1{ Fs:7 FL:32 Fs:9}



static void Test_BFu7s_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_BFu9s, BFu7s_BFu32ll_BFu9s)
//============================================================================


struct  BFu7s_BFu32ll_C  {
  unsigned short v1:7;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu7s_BFu32ll_C) C1{ Fs:7 FL:32 Fc}



static void Test_BFu7s_BFu32ll_C()
{
  {
    init_simple_test("BFu7s_BFu32ll_C");
    static STRUCT_IF_C BFu7s_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_C");
    check_field_offset(lv, v3, 5, "BFu7s_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_C, BFu7s_BFu32ll_C)
//============================================================================


struct  BFu7s_BFu32ll_D  {
  unsigned short v1:7;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu7s_BFu32ll_D) C1{ Fs:7 FL:32 FL}



static void Test_BFu7s_BFu32ll_D()
{
  {
    init_simple_test("BFu7s_BFu32ll_D");
    static STRUCT_IF_C BFu7s_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_D, BFu7s_BFu32ll_D)
//============================================================================


struct  BFu7s_BFu32ll_F  {
  unsigned short v1:7;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu7s_BFu32ll_F) C1{ Fs:7 FL:32 Fi}



static void Test_BFu7s_BFu32ll_F()
{
  {
    init_simple_test("BFu7s_BFu32ll_F");
    static STRUCT_IF_C BFu7s_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_F, BFu7s_BFu32ll_F)
//============================================================================


struct  BFu7s_BFu32ll_I  {
  unsigned short v1:7;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu7s_BFu32ll_I) C1{ Fs:7 FL:32 Fi}



static void Test_BFu7s_BFu32ll_I()
{
  {
    init_simple_test("BFu7s_BFu32ll_I");
    static STRUCT_IF_C BFu7s_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_I, BFu7s_BFu32ll_I)
//============================================================================


struct  BFu7s_BFu32ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu7s_BFu32ll_Ip) C1{ Fs:7 FL:32 Fp}



static void Test_BFu7s_BFu32ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu32ll_Ip");
    static STRUCT_IF_C BFu7s_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Ip, BFu7s_BFu32ll_Ip)
//============================================================================


struct  BFu7s_BFu32ll_L  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu32ll_L) C1{ Fs:7 FL:32 FL}



static void Test_BFu7s_BFu32ll_L()
{
  {
    init_simple_test("BFu7s_BFu32ll_L");
    static STRUCT_IF_C BFu7s_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_L, BFu7s_BFu32ll_L)
//============================================================================


struct  BFu7s_BFu32ll_S  {
  unsigned short v1:7;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu7s_BFu32ll_S) C1{ Fs:7 FL:32 Fs}



static void Test_BFu7s_BFu32ll_S()
{
  {
    init_simple_test("BFu7s_BFu32ll_S");
    static STRUCT_IF_C BFu7s_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu7s_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_S, BFu7s_BFu32ll_S)
//============================================================================


struct  BFu7s_BFu32ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu32ll_Uc) C1{ Fs:7 FL:32 Fc}



static void Test_BFu7s_BFu32ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu32ll_Uc");
    static STRUCT_IF_C BFu7s_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7s_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Uc, BFu7s_BFu32ll_Uc)
//============================================================================


struct  BFu7s_BFu32ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu32ll_Ui) C1{ Fs:7 FL:32 Fi}



static void Test_BFu7s_BFu32ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu32ll_Ui");
    static STRUCT_IF_C BFu7s_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Ui, BFu7s_BFu32ll_Ui)
//============================================================================


struct  BFu7s_BFu32ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu32ll_Ul) C1{ Fs:7 FL:32 FL}



static void Test_BFu7s_BFu32ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu32ll_Ul");
    static STRUCT_IF_C BFu7s_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Ul, BFu7s_BFu32ll_Ul)
//============================================================================


struct  BFu7s_BFu32ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu32ll_Us) C1{ Fs:7 FL:32 Fs}



static void Test_BFu7s_BFu32ll_Us()
{
  {
    init_simple_test("BFu7s_BFu32ll_Us");
    static STRUCT_IF_C BFu7s_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu7s_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Us, BFu7s_BFu32ll_Us)
//============================================================================


struct  BFu7s_BFu32ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu7s_BFu32ll_Vp) C1{ Fs:7 FL:32 Fp}



static void Test_BFu7s_BFu32ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu32ll_Vp");
    static STRUCT_IF_C BFu7s_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7s_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu32ll_Vp, BFu7s_BFu32ll_Vp)
//============================================================================


struct  BFu7s_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu7s_BFu33) C1{ Fs:7 FL:33}



static void Test_BFu7s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu33");
    static STRUCT_IF_C BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33, BFu7s_BFu33)
//============================================================================


struct  BFu7s_BFu33_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu33_BFu15i) C1{ Fs:7 FL:33 Fi:15}



static void Test_BFu7s_BFu33_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu15i");
    static STRUCT_IF_C BFu7s_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu15i, BFu7s_BFu33_BFu15i)
//============================================================================


struct  BFu7s_BFu33_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu33_BFu15ll) C1{ Fs:7 FL:33 FL:15}



static void Test_BFu7s_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu15ll, BFu7s_BFu33_BFu15ll)
//============================================================================


struct  BFu7s_BFu33_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu33_BFu15s) C1{ Fs:7 FL:33 Fs:15}



static void Test_BFu7s_BFu33_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu15s");
    static STRUCT_IF_C BFu7s_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu15s, BFu7s_BFu33_BFu15s)
//============================================================================


struct  BFu7s_BFu33_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu33_BFu16i) C1{ Fs:7 FL:33 Fi:16}



static void Test_BFu7s_BFu33_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu16i");
    static STRUCT_IF_C BFu7s_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu16i, BFu7s_BFu33_BFu16i)
//============================================================================


struct  BFu7s_BFu33_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu33_BFu16ll) C1{ Fs:7 FL:33 FL:16}



static void Test_BFu7s_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu16ll, BFu7s_BFu33_BFu16ll)
//============================================================================


struct  BFu7s_BFu33_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu33_BFu16s) C1{ Fs:7 FL:33 Fs:16}



static void Test_BFu7s_BFu33_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu16s");
    static STRUCT_IF_C BFu7s_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu16s, BFu7s_BFu33_BFu16s)
//============================================================================


struct  BFu7s_BFu33_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu33_BFu17i) C1{ Fs:7 FL:33 Fi:17}



static void Test_BFu7s_BFu33_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu17i");
    static STRUCT_IF_C BFu7s_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu17i, BFu7s_BFu33_BFu17i)
//============================================================================


struct  BFu7s_BFu33_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu33_BFu17ll) C1{ Fs:7 FL:33 FL:17}



static void Test_BFu7s_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu17ll, BFu7s_BFu33_BFu17ll)
//============================================================================


struct  BFu7s_BFu33_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu33_BFu1c) C1{ Fs:7 FL:33 Fc:1}



static void Test_BFu7s_BFu33_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu33_BFu1c");
    static STRUCT_IF_C BFu7s_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7s_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu1c, BFu7s_BFu33_BFu1c)
//============================================================================


struct  BFu7s_BFu33_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu33_BFu1i) C1{ Fs:7 FL:33 Fi:1}



static void Test_BFu7s_BFu33_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu1i");
    static STRUCT_IF_C BFu7s_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7s_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu1i, BFu7s_BFu33_BFu1i)
//============================================================================


struct  BFu7s_BFu33_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu33_BFu1ll) C1{ Fs:7 FL:33 FL:1}



static void Test_BFu7s_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7s_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu1ll, BFu7s_BFu33_BFu1ll)
//============================================================================


struct  BFu7s_BFu33_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu33_BFu1s) C1{ Fs:7 FL:33 Fs:1}



static void Test_BFu7s_BFu33_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu1s");
    static STRUCT_IF_C BFu7s_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7s_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu1s, BFu7s_BFu33_BFu1s)
//============================================================================


struct  BFu7s_BFu33_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu33_BFu31i) C1{ Fs:7 FL:33 Fi:31}



static void Test_BFu7s_BFu33_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu31i");
    static STRUCT_IF_C BFu7s_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu31i, BFu7s_BFu33_BFu31i)
//============================================================================


struct  BFu7s_BFu33_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu33_BFu31ll) C1{ Fs:7 FL:33 FL:31}



static void Test_BFu7s_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu7s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu7s_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu31ll, BFu7s_BFu33_BFu31ll)
//============================================================================


struct  BFu7s_BFu33_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu33_BFu32i) C1{ Fs:7 FL:33 Fi:32}



static void Test_BFu7s_BFu33_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu32i");
    static STRUCT_IF_C BFu7s_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu32i, BFu7s_BFu33_BFu32i)
//============================================================================


struct  BFu7s_BFu33_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu33_BFu32ll) C1{ Fs:7 FL:33 FL:32}



static void Test_BFu7s_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu7s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu7s_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu32ll, BFu7s_BFu33_BFu32ll)
//============================================================================


struct  BFu7s_BFu33_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu33_BFu33) C1{ Fs:7 FL:33 FL:33}



static void Test_BFu7s_BFu33_BFu33()
{
  {
    init_simple_test("BFu7s_BFu33_BFu33");
    static STRUCT_IF_C BFu7s_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu7s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu33, BFu7s_BFu33_BFu33)
//============================================================================


struct  BFu7s_BFu33_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu33_BFu7c) C1{ Fs:7 FL:33 Fc:7}



static void Test_BFu7s_BFu33_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu33_BFu7c");
    static STRUCT_IF_C BFu7s_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu7c, BFu7s_BFu33_BFu7c)
//============================================================================


struct  BFu7s_BFu33_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu33_BFu7i) C1{ Fs:7 FL:33 Fi:7}



static void Test_BFu7s_BFu33_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu7i");
    static STRUCT_IF_C BFu7s_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu7i, BFu7s_BFu33_BFu7i)
//============================================================================


struct  BFu7s_BFu33_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu33_BFu7ll) C1{ Fs:7 FL:33 FL:7}



static void Test_BFu7s_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu7ll, BFu7s_BFu33_BFu7ll)
//============================================================================


struct  BFu7s_BFu33_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu33_BFu7s) C1{ Fs:7 FL:33 Fs:7}



static void Test_BFu7s_BFu33_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu7s");
    static STRUCT_IF_C BFu7s_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu7s, BFu7s_BFu33_BFu7s)
//============================================================================


struct  BFu7s_BFu33_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu33_BFu8c) C1{ Fs:7 FL:33 Fc:8}



static void Test_BFu7s_BFu33_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu33_BFu8c");
    static STRUCT_IF_C BFu7s_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu8c, BFu7s_BFu33_BFu8c)
//============================================================================


struct  BFu7s_BFu33_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu33_BFu8i) C1{ Fs:7 FL:33 Fi:8}



static void Test_BFu7s_BFu33_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu8i");
    static STRUCT_IF_C BFu7s_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu8i, BFu7s_BFu33_BFu8i)
//============================================================================


struct  BFu7s_BFu33_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu33_BFu8ll) C1{ Fs:7 FL:33 FL:8}



static void Test_BFu7s_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu8ll, BFu7s_BFu33_BFu8ll)
//============================================================================


struct  BFu7s_BFu33_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu33_BFu8s) C1{ Fs:7 FL:33 Fs:8}



static void Test_BFu7s_BFu33_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu8s");
    static STRUCT_IF_C BFu7s_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu8s, BFu7s_BFu33_BFu8s)
//============================================================================


struct  BFu7s_BFu33_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu33_BFu9i) C1{ Fs:7 FL:33 Fi:9}



static void Test_BFu7s_BFu33_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu9i");
    static STRUCT_IF_C BFu7s_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu9i, BFu7s_BFu33_BFu9i)
//============================================================================


struct  BFu7s_BFu33_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu33_BFu9ll) C1{ Fs:7 FL:33 FL:9}



static void Test_BFu7s_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu9ll, BFu7s_BFu33_BFu9ll)
//============================================================================


struct  BFu7s_BFu33_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu33_BFu9s) C1{ Fs:7 FL:33 Fs:9}



static void Test_BFu7s_BFu33_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu9s");
    static STRUCT_IF_C BFu7s_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu7s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_BFu9s, BFu7s_BFu33_BFu9s)
//============================================================================


struct  BFu7s_BFu33_C  {
  unsigned short v1:7;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu7s_BFu33_C) C1{ Fs:7 FL:33 Fc}



static void Test_BFu7s_BFu33_C()
{
  {
    init_simple_test("BFu7s_BFu33_C");
    static STRUCT_IF_C BFu7s_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_C");
    check_field_offset(lv, v3, 5, "BFu7s_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_C, BFu7s_BFu33_C)
//============================================================================


struct  BFu7s_BFu33_D  {
  unsigned short v1:7;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu7s_BFu33_D) C1{ Fs:7 FL:33 FL}



static void Test_BFu7s_BFu33_D()
{
  {
    init_simple_test("BFu7s_BFu33_D");
    static STRUCT_IF_C BFu7s_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_D, BFu7s_BFu33_D)
//============================================================================


struct  BFu7s_BFu33_F  {
  unsigned short v1:7;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu7s_BFu33_F) C1{ Fs:7 FL:33 Fi}



static void Test_BFu7s_BFu33_F()
{
  {
    init_simple_test("BFu7s_BFu33_F");
    static STRUCT_IF_C BFu7s_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_F, BFu7s_BFu33_F)
//============================================================================


struct  BFu7s_BFu33_I  {
  unsigned short v1:7;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu7s_BFu33_I) C1{ Fs:7 FL:33 Fi}



static void Test_BFu7s_BFu33_I()
{
  {
    init_simple_test("BFu7s_BFu33_I");
    static STRUCT_IF_C BFu7s_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_I, BFu7s_BFu33_I)
//============================================================================


struct  BFu7s_BFu33_Ip  {
  unsigned short v1:7;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu7s_BFu33_Ip) C1{ Fs:7 FL:33 Fp}



static void Test_BFu7s_BFu33_Ip()
{
  {
    init_simple_test("BFu7s_BFu33_Ip");
    static STRUCT_IF_C BFu7s_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Ip, BFu7s_BFu33_Ip)
//============================================================================


struct  BFu7s_BFu33_L  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu33_L) C1{ Fs:7 FL:33 FL}



static void Test_BFu7s_BFu33_L()
{
  {
    init_simple_test("BFu7s_BFu33_L");
    static STRUCT_IF_C BFu7s_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_L, BFu7s_BFu33_L)
//============================================================================


struct  BFu7s_BFu33_S  {
  unsigned short v1:7;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu7s_BFu33_S) C1{ Fs:7 FL:33 Fs}



static void Test_BFu7s_BFu33_S()
{
  {
    init_simple_test("BFu7s_BFu33_S");
    static STRUCT_IF_C BFu7s_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu7s_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_S, BFu7s_BFu33_S)
//============================================================================


struct  BFu7s_BFu33_Uc  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu33_Uc) C1{ Fs:7 FL:33 Fc}



static void Test_BFu7s_BFu33_Uc()
{
  {
    init_simple_test("BFu7s_BFu33_Uc");
    static STRUCT_IF_C BFu7s_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Uc");
    check_field_offset(lv, v3, 5, "BFu7s_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Uc, BFu7s_BFu33_Uc)
//============================================================================


struct  BFu7s_BFu33_Ui  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu33_Ui) C1{ Fs:7 FL:33 Fi}



static void Test_BFu7s_BFu33_Ui()
{
  {
    init_simple_test("BFu7s_BFu33_Ui");
    static STRUCT_IF_C BFu7s_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Ui, BFu7s_BFu33_Ui)
//============================================================================


struct  BFu7s_BFu33_Ul  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu33_Ul) C1{ Fs:7 FL:33 FL}



static void Test_BFu7s_BFu33_Ul()
{
  {
    init_simple_test("BFu7s_BFu33_Ul");
    static STRUCT_IF_C BFu7s_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Ul, BFu7s_BFu33_Ul)
//============================================================================


struct  BFu7s_BFu33_Us  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu33_Us) C1{ Fs:7 FL:33 Fs}



static void Test_BFu7s_BFu33_Us()
{
  {
    init_simple_test("BFu7s_BFu33_Us");
    static STRUCT_IF_C BFu7s_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu7s_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Us, BFu7s_BFu33_Us)
//============================================================================


struct  BFu7s_BFu33_Vp  {
  unsigned short v1:7;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu7s_BFu33_Vp) C1{ Fs:7 FL:33 Fp}



static void Test_BFu7s_BFu33_Vp()
{
  {
    init_simple_test("BFu7s_BFu33_Vp");
    static STRUCT_IF_C BFu7s_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu7s_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu33_Vp, BFu7s_BFu33_Vp)
//============================================================================


struct  BFu7s_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu7s_BFu7c) C1{ Fs:7 Fc:7}



static void Test_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c, BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c, BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFs7c, BFu7s_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFs7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFs7i, BFu7s_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFs7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFs7ll, BFu7s_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFs7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFs7s, BFu7s_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFu7c, BFu7s_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFu7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFu7i, BFu7s_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFu7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFu7ll, BFu7s_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7c_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7c_BFu7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7c_BFu7s, BFu7s_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i) C1{ Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i, BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFs7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFs7c, BFu7s_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFs7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFs7i, BFu7s_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFs7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFs7ll, BFu7s_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFs7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFs7s, BFu7s_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFu7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFu7c, BFu7s_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFu7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFu7i, BFu7s_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFu7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFu7ll, BFu7s_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7i_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7i_BFu7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7i_BFu7s, BFu7s_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll) C1{ Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll, BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFs7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFs7c, BFu7s_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFs7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFs7i, BFu7s_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFs7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFs7ll, BFu7s_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFs7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFs7s, BFu7s_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFu7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFu7c, BFu7s_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFu7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFu7i, BFu7s_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFu7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFu7ll, BFu7s_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7ll_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7ll_BFu7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7ll_BFu7s, BFu7s_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s) C1{ Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s, BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFs7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFs7c, BFu7s_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFs7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFs7i, BFu7s_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFs7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFs7ll, BFu7s_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFs7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFs7s, BFu7s_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFu7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFu7c, BFu7s_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFu7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFu7i, BFu7s_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFu7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFu7ll, BFu7s_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFs7s_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFs7s_BFu7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFs7s_BFu7s, BFu7s_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu15i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu7c_BFu15i) C1{ Fs:7 Fc:7 Fi:15}



static void Test_BFu7s_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu15i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu15i, BFu7s_BFu7c_BFu15i)
//============================================================================


struct  BFu7s_BFu7c_BFu15ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu7c_BFu15ll) C1{ Fs:7 Fc:7 FL:15}



static void Test_BFu7s_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu15ll, BFu7s_BFu7c_BFu15ll)
//============================================================================


struct  BFu7s_BFu7c_BFu15s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu7c_BFu15s) C1{ Fs:7 Fc:7 Fs:15}



static void Test_BFu7s_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu15s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu15s, BFu7s_BFu7c_BFu15s)
//============================================================================


struct  BFu7s_BFu7c_BFu16i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu7c_BFu16i) C1{ Fs:7 Fc:7 Fi:16}



static void Test_BFu7s_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu16i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu16i, BFu7s_BFu7c_BFu16i)
//============================================================================


struct  BFu7s_BFu7c_BFu16ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu7c_BFu16ll) C1{ Fs:7 Fc:7 FL:16}



static void Test_BFu7s_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu16ll, BFu7s_BFu7c_BFu16ll)
//============================================================================


struct  BFu7s_BFu7c_BFu16s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu7c_BFu16s) C1{ Fs:7 Fc:7 Fs:16}



static void Test_BFu7s_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu16s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu16s, BFu7s_BFu7c_BFu16s)
//============================================================================


struct  BFu7s_BFu7c_BFu17i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu7c_BFu17i) C1{ Fs:7 Fc:7 Fi:17}



static void Test_BFu7s_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu17i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu17i, BFu7s_BFu7c_BFu17i)
//============================================================================


struct  BFu7s_BFu7c_BFu17ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu7c_BFu17ll) C1{ Fs:7 Fc:7 FL:17}



static void Test_BFu7s_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu17ll, BFu7s_BFu7c_BFu17ll)
//============================================================================


struct  BFu7s_BFu7c_BFu1c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu7c_BFu1c) C1{ Fs:7 Fc:7 Fc:1}



static void Test_BFu7s_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu1c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu1c, BFu7s_BFu7c_BFu1c)
//============================================================================


struct  BFu7s_BFu7c_BFu1i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu7c_BFu1i) C1{ Fs:7 Fc:7 Fi:1}



static void Test_BFu7s_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu1i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu1i, BFu7s_BFu7c_BFu1i)
//============================================================================


struct  BFu7s_BFu7c_BFu1ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu7c_BFu1ll) C1{ Fs:7 Fc:7 FL:1}



static void Test_BFu7s_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu1ll, BFu7s_BFu7c_BFu1ll)
//============================================================================


struct  BFu7s_BFu7c_BFu1s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu7c_BFu1s) C1{ Fs:7 Fc:7 Fs:1}



static void Test_BFu7s_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu1s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu1s, BFu7s_BFu7c_BFu1s)
//============================================================================


struct  BFu7s_BFu7c_BFu31i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu7c_BFu31i) C1{ Fs:7 Fc:7 Fi:31}



static void Test_BFu7s_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu31i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu31i, BFu7s_BFu7c_BFu31i)
//============================================================================


struct  BFu7s_BFu7c_BFu31ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu7c_BFu31ll) C1{ Fs:7 Fc:7 FL:31}



static void Test_BFu7s_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu31ll, BFu7s_BFu7c_BFu31ll)
//============================================================================


struct  BFu7s_BFu7c_BFu32i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu7c_BFu32i) C1{ Fs:7 Fc:7 Fi:32}



static void Test_BFu7s_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu32i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu32i, BFu7s_BFu7c_BFu32i)
//============================================================================


struct  BFu7s_BFu7c_BFu32ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu7c_BFu32ll) C1{ Fs:7 Fc:7 FL:32}



static void Test_BFu7s_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu32ll, BFu7s_BFu7c_BFu32ll)
//============================================================================


struct  BFu7s_BFu7c_BFu33  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu7c_BFu33) C1{ Fs:7 Fc:7 FL:33}



static void Test_BFu7s_BFu7c_BFu33()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu33");
    static STRUCT_IF_C BFu7s_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu33, BFu7s_BFu7c_BFu33)
//============================================================================


struct  BFu7s_BFu7c_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c, BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFs7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFs7c, BFu7s_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFs7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFs7i, BFu7s_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFs7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFs7ll, BFu7s_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFs7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFs7s, BFu7s_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFu7c) C1{ Fs:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFu7c, BFu7s_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFu7i) C1{ Fs:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFu7i, BFu7s_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFu7ll) C1{ Fs:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFu7ll, BFu7s_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7c_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7c_BFu7s) C1{ Fs:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7c_BFu7s, BFu7s_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i) C1{ Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i, BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFs7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFs7c, BFu7s_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFs7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFs7i, BFu7s_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFs7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFs7ll, BFu7s_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFs7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFs7s, BFu7s_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFu7c) C1{ Fs:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFu7c, BFu7s_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFu7i) C1{ Fs:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFu7i, BFu7s_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFu7ll) C1{ Fs:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFu7ll, BFu7s_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7i_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7i_BFu7s) C1{ Fs:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7i_BFu7s, BFu7s_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll) C1{ Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll, BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFs7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFs7c, BFu7s_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFs7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFs7i, BFu7s_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFs7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFs7ll, BFu7s_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFs7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFs7s, BFu7s_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFu7c) C1{ Fs:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFu7c, BFu7s_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFu7i) C1{ Fs:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFu7i, BFu7s_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFu7ll) C1{ Fs:7 Fc:7 FL:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFu7ll, BFu7s_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7ll_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7ll_BFu7s) C1{ Fs:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7s_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7ll_BFu7s, BFu7s_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s) C1{ Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s, BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFs7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFs7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFs7c, BFu7s_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFs7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFs7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFs7i, BFu7s_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFs7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFs7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFs7ll, BFu7s_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFs7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFs7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFs7s, BFu7s_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFu7c) C1{ Fs:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFu7c, BFu7s_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFu7i) C1{ Fs:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFu7i, BFu7s_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFu7ll) C1{ Fs:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFu7ll, BFu7s_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7c_BFu7s_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7c_BFu7s_BFu7s) C1{ Fs:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu7s_BFu7s, BFu7s_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7c_BFu8c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu7c_BFu8c) C1{ Fs:7 Fc:7 Fc:8}



static void Test_BFu7s_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu8c");
    static STRUCT_IF_C BFu7s_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu8c, BFu7s_BFu7c_BFu8c)
//============================================================================


struct  BFu7s_BFu7c_BFu8i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu7c_BFu8i) C1{ Fs:7 Fc:7 Fi:8}



static void Test_BFu7s_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu8i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu8i, BFu7s_BFu7c_BFu8i)
//============================================================================


struct  BFu7s_BFu7c_BFu8ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu7c_BFu8ll) C1{ Fs:7 Fc:7 FL:8}



static void Test_BFu7s_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu8ll, BFu7s_BFu7c_BFu8ll)
//============================================================================


struct  BFu7s_BFu7c_BFu8s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu7c_BFu8s) C1{ Fs:7 Fc:7 Fs:8}



static void Test_BFu7s_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu8s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu8s, BFu7s_BFu7c_BFu8s)
//============================================================================


struct  BFu7s_BFu7c_BFu9i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu7c_BFu9i) C1{ Fs:7 Fc:7 Fi:9}



static void Test_BFu7s_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu9i");
    static STRUCT_IF_C BFu7s_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu9i, BFu7s_BFu7c_BFu9i)
//============================================================================


struct  BFu7s_BFu7c_BFu9ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu7c_BFu9ll) C1{ Fs:7 Fc:7 FL:9}



static void Test_BFu7s_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu9ll, BFu7s_BFu7c_BFu9ll)
//============================================================================


struct  BFu7s_BFu7c_BFu9s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu7c_BFu9s) C1{ Fs:7 Fc:7 Fs:9}



static void Test_BFu7s_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu9s");
    static STRUCT_IF_C BFu7s_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_BFu9s, BFu7s_BFu7c_BFu9s)
//============================================================================


struct  BFu7s_BFu7c_C  {
  unsigned short v1:7;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu7s_BFu7c_C) C1{ Fs:7 Fc:7 Fc}



static void Test_BFu7s_BFu7c_C()
{
  {
    init_simple_test("BFu7s_BFu7c_C");
    static STRUCT_IF_C BFu7s_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_C, BFu7s_BFu7c_C)
//============================================================================


struct  BFu7s_BFu7c_D  {
  unsigned short v1:7;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu7s_BFu7c_D) C1{ Fs:7 Fc:7 FL}



static void Test_BFu7s_BFu7c_D()
{
  {
    init_simple_test("BFu7s_BFu7c_D");
    static STRUCT_IF_C BFu7s_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_D, BFu7s_BFu7c_D)
//============================================================================


struct  BFu7s_BFu7c_F  {
  unsigned short v1:7;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu7s_BFu7c_F) C1{ Fs:7 Fc:7 Fi}



static void Test_BFu7s_BFu7c_F()
{
  {
    init_simple_test("BFu7s_BFu7c_F");
    static STRUCT_IF_C BFu7s_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_F, BFu7s_BFu7c_F)
//============================================================================


struct  BFu7s_BFu7c_I  {
  unsigned short v1:7;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu7s_BFu7c_I) C1{ Fs:7 Fc:7 Fi}



static void Test_BFu7s_BFu7c_I()
{
  {
    init_simple_test("BFu7s_BFu7c_I");
    static STRUCT_IF_C BFu7s_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_I, BFu7s_BFu7c_I)
//============================================================================


struct  BFu7s_BFu7c_Ip  {
  unsigned short v1:7;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu7s_BFu7c_Ip) C1{ Fs:7 Fc:7 Fp}



static void Test_BFu7s_BFu7c_Ip()
{
  {
    init_simple_test("BFu7s_BFu7c_Ip");
    static STRUCT_IF_C BFu7s_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Ip, BFu7s_BFu7c_Ip)
//============================================================================


struct  BFu7s_BFu7c_L  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu7c_L) C1{ Fs:7 Fc:7 FL}



static void Test_BFu7s_BFu7c_L()
{
  {
    init_simple_test("BFu7s_BFu7c_L");
    static STRUCT_IF_C BFu7s_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_L, BFu7s_BFu7c_L)
//============================================================================


struct  BFu7s_BFu7c_S  {
  unsigned short v1:7;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu7s_BFu7c_S) C1{ Fs:7 Fc:7 Fs}



static void Test_BFu7s_BFu7c_S()
{
  {
    init_simple_test("BFu7s_BFu7c_S");
    static STRUCT_IF_C BFu7s_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_S, BFu7s_BFu7c_S)
//============================================================================


struct  BFu7s_BFu7c_Uc  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu7c_Uc) C1{ Fs:7 Fc:7 Fc}



static void Test_BFu7s_BFu7c_Uc()
{
  {
    init_simple_test("BFu7s_BFu7c_Uc");
    static STRUCT_IF_C BFu7s_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Uc, BFu7s_BFu7c_Uc)
//============================================================================


struct  BFu7s_BFu7c_Ui  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu7c_Ui) C1{ Fs:7 Fc:7 Fi}



static void Test_BFu7s_BFu7c_Ui()
{
  {
    init_simple_test("BFu7s_BFu7c_Ui");
    static STRUCT_IF_C BFu7s_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Ui, BFu7s_BFu7c_Ui)
//============================================================================


struct  BFu7s_BFu7c_Ul  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu7c_Ul) C1{ Fs:7 Fc:7 FL}



static void Test_BFu7s_BFu7c_Ul()
{
  {
    init_simple_test("BFu7s_BFu7c_Ul");
    static STRUCT_IF_C BFu7s_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Ul, BFu7s_BFu7c_Ul)
//============================================================================


struct  BFu7s_BFu7c_Us  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu7c_Us) C1{ Fs:7 Fc:7 Fs}



static void Test_BFu7s_BFu7c_Us()
{
  {
    init_simple_test("BFu7s_BFu7c_Us");
    static STRUCT_IF_C BFu7s_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Us, BFu7s_BFu7c_Us)
//============================================================================


struct  BFu7s_BFu7c_Vp  {
  unsigned short v1:7;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu7s_BFu7c_Vp) C1{ Fs:7 Fc:7 Fp}



static void Test_BFu7s_BFu7c_Vp()
{
  {
    init_simple_test("BFu7s_BFu7c_Vp");
    static STRUCT_IF_C BFu7s_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7c_Vp, BFu7s_BFu7c_Vp)
//============================================================================


struct  BFu7s_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu7s_BFu7i) C1{ Fs:7 Fi:7}



static void Test_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i, BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c) C1{ Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c, BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFs7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFs7c, BFu7s_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFs7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFs7i, BFu7s_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFs7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFs7ll, BFu7s_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFs7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFs7s, BFu7s_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFu7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFu7c, BFu7s_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFu7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFu7i, BFu7s_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFu7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFu7ll, BFu7s_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7c_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7c_BFu7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7c_BFu7s, BFu7s_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i, BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFs7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFs7c, BFu7s_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFs7i, BFu7s_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFs7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFs7ll, BFu7s_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFs7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFs7s, BFu7s_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFu7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFu7c, BFu7s_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFu7i, BFu7s_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFu7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFu7ll, BFu7s_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7i_BFu7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7i_BFu7s, BFu7s_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll) C1{ Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll, BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFs7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFs7c, BFu7s_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFs7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFs7i, BFu7s_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFs7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFs7ll, BFu7s_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFs7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFs7s, BFu7s_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFu7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFu7c, BFu7s_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFu7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFu7i, BFu7s_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFu7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFu7ll, BFu7s_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7ll_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7ll_BFu7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7ll_BFu7s, BFu7s_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s) C1{ Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s, BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFs7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFs7c, BFu7s_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFs7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFs7i, BFu7s_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFs7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFs7ll, BFu7s_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFs7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFs7s, BFu7s_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFu7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFu7c, BFu7s_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFu7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFu7i, BFu7s_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFu7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFu7ll, BFu7s_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFs7s_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFs7s_BFu7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFs7s_BFu7s, BFu7s_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu7i_BFu15i) C1{ Fs:7 Fi:7 Fi:15}



static void Test_BFu7s_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu15i, BFu7s_BFu7i_BFu15i)
//============================================================================


struct  BFu7s_BFu7i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu7i_BFu15ll) C1{ Fs:7 Fi:7 FL:15}



static void Test_BFu7s_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu15ll, BFu7s_BFu7i_BFu15ll)
//============================================================================


struct  BFu7s_BFu7i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu7i_BFu15s) C1{ Fs:7 Fi:7 Fs:15}



static void Test_BFu7s_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu15s, BFu7s_BFu7i_BFu15s)
//============================================================================


struct  BFu7s_BFu7i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu7i_BFu16i) C1{ Fs:7 Fi:7 Fi:16}



static void Test_BFu7s_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu16i, BFu7s_BFu7i_BFu16i)
//============================================================================


struct  BFu7s_BFu7i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu7i_BFu16ll) C1{ Fs:7 Fi:7 FL:16}



static void Test_BFu7s_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu16ll, BFu7s_BFu7i_BFu16ll)
//============================================================================


struct  BFu7s_BFu7i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu7i_BFu16s) C1{ Fs:7 Fi:7 Fs:16}



static void Test_BFu7s_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu16s, BFu7s_BFu7i_BFu16s)
//============================================================================


struct  BFu7s_BFu7i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu7i_BFu17i) C1{ Fs:7 Fi:7 Fi:17}



static void Test_BFu7s_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu17i, BFu7s_BFu7i_BFu17i)
//============================================================================


struct  BFu7s_BFu7i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu7i_BFu17ll) C1{ Fs:7 Fi:7 FL:17}



static void Test_BFu7s_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu17ll, BFu7s_BFu7i_BFu17ll)
//============================================================================


struct  BFu7s_BFu7i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu7i_BFu1c) C1{ Fs:7 Fi:7 Fc:1}



static void Test_BFu7s_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu1c, BFu7s_BFu7i_BFu1c)
//============================================================================


struct  BFu7s_BFu7i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu7i_BFu1i) C1{ Fs:7 Fi:7 Fi:1}



static void Test_BFu7s_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu1i, BFu7s_BFu7i_BFu1i)
//============================================================================


struct  BFu7s_BFu7i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu7i_BFu1ll) C1{ Fs:7 Fi:7 FL:1}



static void Test_BFu7s_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu1ll, BFu7s_BFu7i_BFu1ll)
//============================================================================


struct  BFu7s_BFu7i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu7i_BFu1s) C1{ Fs:7 Fi:7 Fs:1}



static void Test_BFu7s_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu1s, BFu7s_BFu7i_BFu1s)
//============================================================================


struct  BFu7s_BFu7i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu7i_BFu31i) C1{ Fs:7 Fi:7 Fi:31}



static void Test_BFu7s_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu31i, BFu7s_BFu7i_BFu31i)
//============================================================================


struct  BFu7s_BFu7i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu7i_BFu31ll) C1{ Fs:7 Fi:7 FL:31}



static void Test_BFu7s_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7s_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu31ll, BFu7s_BFu7i_BFu31ll)
//============================================================================


struct  BFu7s_BFu7i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu7i_BFu32i) C1{ Fs:7 Fi:7 Fi:32}



static void Test_BFu7s_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu32i, BFu7s_BFu7i_BFu32i)
//============================================================================


struct  BFu7s_BFu7i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu7i_BFu32ll) C1{ Fs:7 Fi:7 FL:32}



static void Test_BFu7s_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7s_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu32ll, BFu7s_BFu7i_BFu32ll)
//============================================================================


struct  BFu7s_BFu7i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu7i_BFu33) C1{ Fs:7 Fi:7 FL:33}



static void Test_BFu7s_BFu7i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu33");
    static STRUCT_IF_C BFu7s_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7s_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu33, BFu7s_BFu7i_BFu33)
//============================================================================


struct  BFu7s_BFu7i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c) C1{ Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c, BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFs7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFs7c, BFu7s_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFs7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFs7i, BFu7s_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFs7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFs7ll, BFu7s_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFs7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFs7s, BFu7s_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFu7c) C1{ Fs:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFu7c, BFu7s_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFu7i) C1{ Fs:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFu7i, BFu7s_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFu7ll) C1{ Fs:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFu7ll, BFu7s_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7c_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7c_BFu7s) C1{ Fs:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7c_BFu7s, BFu7s_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i, BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFs7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFs7c, BFu7s_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFs7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFs7i, BFu7s_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFs7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFs7ll, BFu7s_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFs7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFs7s, BFu7s_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFu7c) C1{ Fs:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFu7c, BFu7s_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFu7i) C1{ Fs:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFu7i, BFu7s_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFu7ll) C1{ Fs:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFu7ll, BFu7s_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7i_BFu7s) C1{ Fs:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7i_BFu7s, BFu7s_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll) C1{ Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll, BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFs7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFs7c, BFu7s_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFs7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFs7i, BFu7s_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFs7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFs7ll, BFu7s_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFs7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFs7s, BFu7s_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFu7c) C1{ Fs:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFu7c, BFu7s_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFu7i) C1{ Fs:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFu7i, BFu7s_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFu7ll) C1{ Fs:7 Fi:7 FL:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFu7ll, BFu7s_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7ll_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7ll_BFu7s) C1{ Fs:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7ll_BFu7s, BFu7s_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s) C1{ Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s, BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFs7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFs7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFs7c, BFu7s_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFs7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFs7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFs7i, BFu7s_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFs7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFs7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFs7ll, BFu7s_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFs7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFs7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFs7s, BFu7s_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFu7c) C1{ Fs:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFu7c, BFu7s_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFu7i) C1{ Fs:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFu7i, BFu7s_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFu7ll) C1{ Fs:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFu7ll, BFu7s_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7i_BFu7s_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7i_BFu7s_BFu7s) C1{ Fs:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu7s_BFu7s, BFu7s_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu7i_BFu8c) C1{ Fs:7 Fi:7 Fc:8}



static void Test_BFu7s_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu8c, BFu7s_BFu7i_BFu8c)
//============================================================================


struct  BFu7s_BFu7i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu7i_BFu8i) C1{ Fs:7 Fi:7 Fi:8}



static void Test_BFu7s_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu8i, BFu7s_BFu7i_BFu8i)
//============================================================================


struct  BFu7s_BFu7i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu7i_BFu8ll) C1{ Fs:7 Fi:7 FL:8}



static void Test_BFu7s_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu8ll, BFu7s_BFu7i_BFu8ll)
//============================================================================


struct  BFu7s_BFu7i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu7i_BFu8s) C1{ Fs:7 Fi:7 Fs:8}



static void Test_BFu7s_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu8s, BFu7s_BFu7i_BFu8s)
//============================================================================


struct  BFu7s_BFu7i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu7i_BFu9i) C1{ Fs:7 Fi:7 Fi:9}



static void Test_BFu7s_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu9i, BFu7s_BFu7i_BFu9i)
//============================================================================


struct  BFu7s_BFu7i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu7i_BFu9ll) C1{ Fs:7 Fi:7 FL:9}



static void Test_BFu7s_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu9ll, BFu7s_BFu7i_BFu9ll)
//============================================================================


struct  BFu7s_BFu7i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu7i_BFu9s) C1{ Fs:7 Fi:7 Fs:9}



static void Test_BFu7s_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_BFu9s, BFu7s_BFu7i_BFu9s)
//============================================================================


struct  BFu7s_BFu7i_C  {
  unsigned short v1:7;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu7s_BFu7i_C) C1{ Fs:7 Fi:7 Fc}



static void Test_BFu7s_BFu7i_C()
{
  {
    init_simple_test("BFu7s_BFu7i_C");
    static STRUCT_IF_C BFu7s_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_C, BFu7s_BFu7i_C)
//============================================================================


struct  BFu7s_BFu7i_D  {
  unsigned short v1:7;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu7s_BFu7i_D) C1{ Fs:7 Fi:7 FL}



static void Test_BFu7s_BFu7i_D()
{
  {
    init_simple_test("BFu7s_BFu7i_D");
    static STRUCT_IF_C BFu7s_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_D, BFu7s_BFu7i_D)
//============================================================================


struct  BFu7s_BFu7i_F  {
  unsigned short v1:7;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu7s_BFu7i_F) C1{ Fs:7 Fi:7 Fi}



static void Test_BFu7s_BFu7i_F()
{
  {
    init_simple_test("BFu7s_BFu7i_F");
    static STRUCT_IF_C BFu7s_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_F, BFu7s_BFu7i_F)
//============================================================================


struct  BFu7s_BFu7i_I  {
  unsigned short v1:7;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu7s_BFu7i_I) C1{ Fs:7 Fi:7 Fi}



static void Test_BFu7s_BFu7i_I()
{
  {
    init_simple_test("BFu7s_BFu7i_I");
    static STRUCT_IF_C BFu7s_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_I, BFu7s_BFu7i_I)
//============================================================================


struct  BFu7s_BFu7i_Ip  {
  unsigned short v1:7;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu7s_BFu7i_Ip) C1{ Fs:7 Fi:7 Fp}



static void Test_BFu7s_BFu7i_Ip()
{
  {
    init_simple_test("BFu7s_BFu7i_Ip");
    static STRUCT_IF_C BFu7s_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Ip, BFu7s_BFu7i_Ip)
//============================================================================


struct  BFu7s_BFu7i_L  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu7i_L) C1{ Fs:7 Fi:7 FL}



static void Test_BFu7s_BFu7i_L()
{
  {
    init_simple_test("BFu7s_BFu7i_L");
    static STRUCT_IF_C BFu7s_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_L, BFu7s_BFu7i_L)
//============================================================================


struct  BFu7s_BFu7i_S  {
  unsigned short v1:7;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu7s_BFu7i_S) C1{ Fs:7 Fi:7 Fs}



static void Test_BFu7s_BFu7i_S()
{
  {
    init_simple_test("BFu7s_BFu7i_S");
    static STRUCT_IF_C BFu7s_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_S, BFu7s_BFu7i_S)
//============================================================================


struct  BFu7s_BFu7i_Uc  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu7i_Uc) C1{ Fs:7 Fi:7 Fc}



static void Test_BFu7s_BFu7i_Uc()
{
  {
    init_simple_test("BFu7s_BFu7i_Uc");
    static STRUCT_IF_C BFu7s_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Uc, BFu7s_BFu7i_Uc)
//============================================================================


struct  BFu7s_BFu7i_Ui  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu7i_Ui) C1{ Fs:7 Fi:7 Fi}



static void Test_BFu7s_BFu7i_Ui()
{
  {
    init_simple_test("BFu7s_BFu7i_Ui");
    static STRUCT_IF_C BFu7s_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Ui, BFu7s_BFu7i_Ui)
//============================================================================


struct  BFu7s_BFu7i_Ul  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu7i_Ul) C1{ Fs:7 Fi:7 FL}



static void Test_BFu7s_BFu7i_Ul()
{
  {
    init_simple_test("BFu7s_BFu7i_Ul");
    static STRUCT_IF_C BFu7s_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Ul, BFu7s_BFu7i_Ul)
//============================================================================


struct  BFu7s_BFu7i_Us  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu7i_Us) C1{ Fs:7 Fi:7 Fs}



static void Test_BFu7s_BFu7i_Us()
{
  {
    init_simple_test("BFu7s_BFu7i_Us");
    static STRUCT_IF_C BFu7s_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Us, BFu7s_BFu7i_Us)
//============================================================================


struct  BFu7s_BFu7i_Vp  {
  unsigned short v1:7;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu7s_BFu7i_Vp) C1{ Fs:7 Fi:7 Fp}



static void Test_BFu7s_BFu7i_Vp()
{
  {
    init_simple_test("BFu7s_BFu7i_Vp");
    static STRUCT_IF_C BFu7s_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7i_Vp, BFu7s_BFu7i_Vp)
//============================================================================


struct  BFu7s_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu7s_BFu7ll) C1{ Fs:7 FL:7}



static void Test_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll, BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c) C1{ Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c, BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFs7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFs7c, BFu7s_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFs7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFs7i, BFu7s_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFs7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFs7ll, BFu7s_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFs7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFs7s, BFu7s_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFu7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFu7c, BFu7s_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFu7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFu7i, BFu7s_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFu7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFu7ll, BFu7s_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7c_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7c_BFu7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7c_BFu7s, BFu7s_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i) C1{ Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i, BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFs7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFs7c, BFu7s_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFs7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFs7i, BFu7s_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFs7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFs7ll, BFu7s_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFs7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFs7s, BFu7s_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFu7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFu7c, BFu7s_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFu7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFu7i, BFu7s_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFu7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFu7ll, BFu7s_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7i_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7i_BFu7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7i_BFu7s, BFu7s_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll, BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFs7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFs7c, BFu7s_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFs7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFs7i, BFu7s_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFs7ll, BFu7s_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFs7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFs7s, BFu7s_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFu7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFu7c, BFu7s_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFu7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFu7i, BFu7s_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFu7ll, BFu7s_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7ll_BFu7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7ll_BFu7s, BFu7s_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s) C1{ Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s, BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFs7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFs7c, BFu7s_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFs7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFs7i, BFu7s_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFs7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFs7ll, BFu7s_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFs7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFs7s, BFu7s_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFu7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFu7c, BFu7s_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFu7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFu7i, BFu7s_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFu7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFu7ll, BFu7s_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFs7s_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFs7s_BFu7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFs7s_BFu7s, BFu7s_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu7ll_BFu15i) C1{ Fs:7 FL:7 Fi:15}



static void Test_BFu7s_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu15i, BFu7s_BFu7ll_BFu15i)
//============================================================================


struct  BFu7s_BFu7ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu7ll_BFu15ll) C1{ Fs:7 FL:7 FL:15}



static void Test_BFu7s_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu15ll, BFu7s_BFu7ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu7ll_BFu15s) C1{ Fs:7 FL:7 Fs:15}



static void Test_BFu7s_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu15s, BFu7s_BFu7ll_BFu15s)
//============================================================================


struct  BFu7s_BFu7ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu7ll_BFu16i) C1{ Fs:7 FL:7 Fi:16}



static void Test_BFu7s_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu16i, BFu7s_BFu7ll_BFu16i)
//============================================================================


struct  BFu7s_BFu7ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu7ll_BFu16ll) C1{ Fs:7 FL:7 FL:16}



static void Test_BFu7s_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu16ll, BFu7s_BFu7ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu7ll_BFu16s) C1{ Fs:7 FL:7 Fs:16}



static void Test_BFu7s_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu16s, BFu7s_BFu7ll_BFu16s)
//============================================================================


struct  BFu7s_BFu7ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu7ll_BFu17i) C1{ Fs:7 FL:7 Fi:17}



static void Test_BFu7s_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu17i, BFu7s_BFu7ll_BFu17i)
//============================================================================


struct  BFu7s_BFu7ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu7ll_BFu17ll) C1{ Fs:7 FL:7 FL:17}



static void Test_BFu7s_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu17ll, BFu7s_BFu7ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu7ll_BFu1c) C1{ Fs:7 FL:7 Fc:1}



static void Test_BFu7s_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu1c, BFu7s_BFu7ll_BFu1c)
//============================================================================


struct  BFu7s_BFu7ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu7ll_BFu1i) C1{ Fs:7 FL:7 Fi:1}



static void Test_BFu7s_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu1i, BFu7s_BFu7ll_BFu1i)
//============================================================================


struct  BFu7s_BFu7ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu7ll_BFu1ll) C1{ Fs:7 FL:7 FL:1}



static void Test_BFu7s_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu1ll, BFu7s_BFu7ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu7ll_BFu1s) C1{ Fs:7 FL:7 Fs:1}



static void Test_BFu7s_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu1s, BFu7s_BFu7ll_BFu1s)
//============================================================================


struct  BFu7s_BFu7ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu7ll_BFu31i) C1{ Fs:7 FL:7 Fi:31}



static void Test_BFu7s_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu31i, BFu7s_BFu7ll_BFu31i)
//============================================================================


struct  BFu7s_BFu7ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu7ll_BFu31ll) C1{ Fs:7 FL:7 FL:31}



static void Test_BFu7s_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7s_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu31ll, BFu7s_BFu7ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu7ll_BFu32i) C1{ Fs:7 FL:7 Fi:32}



static void Test_BFu7s_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu32i, BFu7s_BFu7ll_BFu32i)
//============================================================================


struct  BFu7s_BFu7ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu7ll_BFu32ll) C1{ Fs:7 FL:7 FL:32}



static void Test_BFu7s_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7s_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu32ll, BFu7s_BFu7ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu7ll_BFu33) C1{ Fs:7 FL:7 FL:33}



static void Test_BFu7s_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7s_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu33, BFu7s_BFu7ll_BFu33)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c) C1{ Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c, BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFs7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFs7c, BFu7s_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFs7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFs7i, BFu7s_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFs7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFs7ll, BFu7s_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFs7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFs7s, BFu7s_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFu7c) C1{ Fs:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFu7c, BFu7s_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFu7i) C1{ Fs:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFu7i, BFu7s_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFu7ll) C1{ Fs:7 FL:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFu7ll, BFu7s_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7c_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7c_BFu7s) C1{ Fs:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7c_BFu7s, BFu7s_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i) C1{ Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i, BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFs7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFs7c, BFu7s_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFs7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFs7i, BFu7s_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFs7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFs7ll, BFu7s_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFs7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFs7s, BFu7s_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFu7c) C1{ Fs:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFu7c, BFu7s_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFu7i) C1{ Fs:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFu7i, BFu7s_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFu7ll) C1{ Fs:7 FL:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFu7ll, BFu7s_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7i_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7i_BFu7s) C1{ Fs:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7i_BFu7s, BFu7s_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll, BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFs7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFs7c, BFu7s_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFs7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFs7i, BFu7s_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFs7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFs7ll, BFu7s_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFs7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFs7s, BFu7s_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFu7c) C1{ Fs:7 FL:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFu7c, BFu7s_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFu7i) C1{ Fs:7 FL:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFu7i, BFu7s_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFu7ll) C1{ Fs:7 FL:7 FL:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFu7ll, BFu7s_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7ll_BFu7s) C1{ Fs:7 FL:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7ll_BFu7s, BFu7s_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s) C1{ Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s, BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFs7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFs7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFs7c, BFu7s_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFs7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFs7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFs7i, BFu7s_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFs7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFs7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFs7ll, BFu7s_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFs7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFs7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFs7s, BFu7s_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFu7c) C1{ Fs:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFu7c, BFu7s_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFu7i) C1{ Fs:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFu7i, BFu7s_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFu7ll) C1{ Fs:7 FL:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFu7ll, BFu7s_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu7s_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7ll_BFu7s_BFu7s) C1{ Fs:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu7s_BFu7s, BFu7s_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu7ll_BFu8c) C1{ Fs:7 FL:7 Fc:8}



static void Test_BFu7s_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu8c, BFu7s_BFu7ll_BFu8c)
//============================================================================


struct  BFu7s_BFu7ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu7ll_BFu8i) C1{ Fs:7 FL:7 Fi:8}



static void Test_BFu7s_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu8i, BFu7s_BFu7ll_BFu8i)
//============================================================================


struct  BFu7s_BFu7ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu7ll_BFu8ll) C1{ Fs:7 FL:7 FL:8}



static void Test_BFu7s_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu8ll, BFu7s_BFu7ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu7ll_BFu8s) C1{ Fs:7 FL:7 Fs:8}



static void Test_BFu7s_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu8s, BFu7s_BFu7ll_BFu8s)
//============================================================================


struct  BFu7s_BFu7ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu7ll_BFu9i) C1{ Fs:7 FL:7 Fi:9}



static void Test_BFu7s_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu9i, BFu7s_BFu7ll_BFu9i)
//============================================================================


struct  BFu7s_BFu7ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu7ll_BFu9ll) C1{ Fs:7 FL:7 FL:9}



static void Test_BFu7s_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu9ll, BFu7s_BFu7ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu7ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu7ll_BFu9s) C1{ Fs:7 FL:7 Fs:9}



static void Test_BFu7s_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_BFu9s, BFu7s_BFu7ll_BFu9s)
//============================================================================


struct  BFu7s_BFu7ll_C  {
  unsigned short v1:7;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu7s_BFu7ll_C) C1{ Fs:7 FL:7 Fc}



static void Test_BFu7s_BFu7ll_C()
{
  {
    init_simple_test("BFu7s_BFu7ll_C");
    static STRUCT_IF_C BFu7s_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_C, BFu7s_BFu7ll_C)
//============================================================================


struct  BFu7s_BFu7ll_D  {
  unsigned short v1:7;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu7s_BFu7ll_D) C1{ Fs:7 FL:7 FL}



static void Test_BFu7s_BFu7ll_D()
{
  {
    init_simple_test("BFu7s_BFu7ll_D");
    static STRUCT_IF_C BFu7s_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_D, BFu7s_BFu7ll_D)
//============================================================================


struct  BFu7s_BFu7ll_F  {
  unsigned short v1:7;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu7s_BFu7ll_F) C1{ Fs:7 FL:7 Fi}



static void Test_BFu7s_BFu7ll_F()
{
  {
    init_simple_test("BFu7s_BFu7ll_F");
    static STRUCT_IF_C BFu7s_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_F, BFu7s_BFu7ll_F)
//============================================================================


struct  BFu7s_BFu7ll_I  {
  unsigned short v1:7;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu7s_BFu7ll_I) C1{ Fs:7 FL:7 Fi}



static void Test_BFu7s_BFu7ll_I()
{
  {
    init_simple_test("BFu7s_BFu7ll_I");
    static STRUCT_IF_C BFu7s_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_I, BFu7s_BFu7ll_I)
//============================================================================


struct  BFu7s_BFu7ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu7s_BFu7ll_Ip) C1{ Fs:7 FL:7 Fp}



static void Test_BFu7s_BFu7ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu7ll_Ip");
    static STRUCT_IF_C BFu7s_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Ip, BFu7s_BFu7ll_Ip)
//============================================================================


struct  BFu7s_BFu7ll_L  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu7ll_L) C1{ Fs:7 FL:7 FL}



static void Test_BFu7s_BFu7ll_L()
{
  {
    init_simple_test("BFu7s_BFu7ll_L");
    static STRUCT_IF_C BFu7s_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_L, BFu7s_BFu7ll_L)
//============================================================================


struct  BFu7s_BFu7ll_S  {
  unsigned short v1:7;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu7s_BFu7ll_S) C1{ Fs:7 FL:7 Fs}



static void Test_BFu7s_BFu7ll_S()
{
  {
    init_simple_test("BFu7s_BFu7ll_S");
    static STRUCT_IF_C BFu7s_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_S, BFu7s_BFu7ll_S)
//============================================================================


struct  BFu7s_BFu7ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu7ll_Uc) C1{ Fs:7 FL:7 Fc}



static void Test_BFu7s_BFu7ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu7ll_Uc");
    static STRUCT_IF_C BFu7s_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Uc, BFu7s_BFu7ll_Uc)
//============================================================================


struct  BFu7s_BFu7ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu7ll_Ui) C1{ Fs:7 FL:7 Fi}



static void Test_BFu7s_BFu7ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu7ll_Ui");
    static STRUCT_IF_C BFu7s_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Ui, BFu7s_BFu7ll_Ui)
//============================================================================


struct  BFu7s_BFu7ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu7ll_Ul) C1{ Fs:7 FL:7 FL}



static void Test_BFu7s_BFu7ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu7ll_Ul");
    static STRUCT_IF_C BFu7s_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Ul, BFu7s_BFu7ll_Ul)
//============================================================================


struct  BFu7s_BFu7ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu7ll_Us) C1{ Fs:7 FL:7 Fs}



static void Test_BFu7s_BFu7ll_Us()
{
  {
    init_simple_test("BFu7s_BFu7ll_Us");
    static STRUCT_IF_C BFu7s_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Us, BFu7s_BFu7ll_Us)
//============================================================================


struct  BFu7s_BFu7ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu7s_BFu7ll_Vp) C1{ Fs:7 FL:7 Fp}



static void Test_BFu7s_BFu7ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu7ll_Vp");
    static STRUCT_IF_C BFu7s_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7ll_Vp, BFu7s_BFu7ll_Vp)
//============================================================================


struct  BFu7s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu7s_BFu7s) C1{ Fs:7 Fs:7}



static void Test_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s, BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c) C1{ Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c, BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFs7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFs7c, BFu7s_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFs7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFs7i, BFu7s_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFs7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFs7ll, BFu7s_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFs7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFs7s, BFu7s_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFu7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFu7c, BFu7s_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFu7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFu7i, BFu7s_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFu7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFu7ll, BFu7s_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7c_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7c_BFu7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7c_BFu7s, BFu7s_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i) C1{ Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i, BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFs7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFs7c, BFu7s_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFs7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFs7i, BFu7s_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFs7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFs7ll, BFu7s_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFs7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFs7s, BFu7s_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFu7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFu7c, BFu7s_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFu7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFu7i, BFu7s_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFu7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFu7ll, BFu7s_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7i_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7i_BFu7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7i_BFu7s, BFu7s_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll) C1{ Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll, BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFs7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFs7c, BFu7s_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFs7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFs7i, BFu7s_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFs7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFs7ll, BFu7s_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFs7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFs7s, BFu7s_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFu7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFu7c, BFu7s_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFu7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFu7i, BFu7s_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFu7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFu7ll, BFu7s_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7ll_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7ll_BFu7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7ll_BFu7s, BFu7s_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s, BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFs7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFs7c, BFu7s_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFs7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFs7i, BFu7s_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFs7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFs7ll, BFu7s_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFs7s, BFu7s_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFu7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFu7c, BFu7s_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFu7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFu7i, BFu7s_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFu7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFu7ll, BFu7s_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFs7s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFs7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFs7s_BFu7s, BFu7s_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu7s_BFu15i) C1{ Fs:7 Fs:7 Fi:15}



static void Test_BFu7s_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu15i, BFu7s_BFu7s_BFu15i)
//============================================================================


struct  BFu7s_BFu7s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu7s_BFu15ll) C1{ Fs:7 Fs:7 FL:15}



static void Test_BFu7s_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7s_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu15ll, BFu7s_BFu7s_BFu15ll)
//============================================================================


struct  BFu7s_BFu7s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu7s_BFu15s) C1{ Fs:7 Fs:7 Fs:15}



static void Test_BFu7s_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu15s, BFu7s_BFu7s_BFu15s)
//============================================================================


struct  BFu7s_BFu7s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu7s_BFu16i) C1{ Fs:7 Fs:7 Fi:16}



static void Test_BFu7s_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu16i, BFu7s_BFu7s_BFu16i)
//============================================================================


struct  BFu7s_BFu7s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu7s_BFu16ll) C1{ Fs:7 Fs:7 FL:16}



static void Test_BFu7s_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7s_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu16ll, BFu7s_BFu7s_BFu16ll)
//============================================================================


struct  BFu7s_BFu7s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu7s_BFu16s) C1{ Fs:7 Fs:7 Fs:16}



static void Test_BFu7s_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu16s, BFu7s_BFu7s_BFu16s)
//============================================================================


struct  BFu7s_BFu7s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu7s_BFu17i) C1{ Fs:7 Fs:7 Fi:17}



static void Test_BFu7s_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu17i, BFu7s_BFu7s_BFu17i)
//============================================================================


struct  BFu7s_BFu7s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu7s_BFu17ll) C1{ Fs:7 Fs:7 FL:17}



static void Test_BFu7s_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7s_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu17ll, BFu7s_BFu7s_BFu17ll)
//============================================================================


struct  BFu7s_BFu7s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu7s_BFu1c) C1{ Fs:7 Fs:7 Fc:1}



static void Test_BFu7s_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu1c, BFu7s_BFu7s_BFu1c)
//============================================================================


struct  BFu7s_BFu7s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu7s_BFu1i) C1{ Fs:7 Fs:7 Fi:1}



static void Test_BFu7s_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu1i, BFu7s_BFu7s_BFu1i)
//============================================================================


struct  BFu7s_BFu7s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu7s_BFu1ll) C1{ Fs:7 Fs:7 FL:1}



static void Test_BFu7s_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu1ll, BFu7s_BFu7s_BFu1ll)
//============================================================================


struct  BFu7s_BFu7s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu7s_BFu1s) C1{ Fs:7 Fs:7 Fs:1}



static void Test_BFu7s_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7s_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu1s, BFu7s_BFu7s_BFu1s)
//============================================================================


struct  BFu7s_BFu7s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu7s_BFu31i) C1{ Fs:7 Fs:7 Fi:31}



static void Test_BFu7s_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu31i, BFu7s_BFu7s_BFu31i)
//============================================================================


struct  BFu7s_BFu7s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu7s_BFu31ll) C1{ Fs:7 Fs:7 FL:31}



static void Test_BFu7s_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7s_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu31ll, BFu7s_BFu7s_BFu31ll)
//============================================================================


struct  BFu7s_BFu7s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu7s_BFu32i) C1{ Fs:7 Fs:7 Fi:32}



static void Test_BFu7s_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu32i, BFu7s_BFu7s_BFu32i)
//============================================================================


struct  BFu7s_BFu7s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu7s_BFu32ll) C1{ Fs:7 Fs:7 FL:32}



static void Test_BFu7s_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7s_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu32ll, BFu7s_BFu7s_BFu32ll)
//============================================================================


struct  BFu7s_BFu7s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu7s_BFu33) C1{ Fs:7 Fs:7 FL:33}



static void Test_BFu7s_BFu7s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu33");
    static STRUCT_IF_C BFu7s_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7s_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu33, BFu7s_BFu7s_BFu33)
//============================================================================


struct  BFu7s_BFu7s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c) C1{ Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c, BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFs7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFs7c, BFu7s_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFs7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFs7i, BFu7s_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFs7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFs7ll, BFu7s_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFs7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFs7s, BFu7s_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFu7c) C1{ Fs:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFu7c, BFu7s_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFu7i) C1{ Fs:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFu7i, BFu7s_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFu7ll) C1{ Fs:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFu7ll, BFu7s_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7c_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7c_BFu7s) C1{ Fs:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7c_BFu7s, BFu7s_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i) C1{ Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i, BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFs7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFs7c, BFu7s_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFs7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFs7i, BFu7s_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFs7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFs7ll, BFu7s_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFs7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFs7s, BFu7s_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFu7c) C1{ Fs:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFu7c, BFu7s_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFu7i) C1{ Fs:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFu7i, BFu7s_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFu7ll) C1{ Fs:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFu7ll, BFu7s_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7i_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7i_BFu7s) C1{ Fs:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7i_BFu7s, BFu7s_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll) C1{ Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll, BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFs7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFs7c, BFu7s_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFs7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFs7i, BFu7s_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFs7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFs7ll, BFu7s_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFs7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFs7s, BFu7s_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFu7c) C1{ Fs:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFu7c, BFu7s_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFu7i) C1{ Fs:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFu7i, BFu7s_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFu7ll) C1{ Fs:7 Fs:7 FL:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFu7ll, BFu7s_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7ll_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7ll_BFu7s) C1{ Fs:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7s_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7ll_BFu7s, BFu7s_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s, BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFs7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFs7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFs7c, BFu7s_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFs7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFs7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFs7i, BFu7s_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFs7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFs7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFs7ll, BFu7s_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFs7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFs7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7s_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFs7s, BFu7s_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFu7c) C1{ Fs:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7s_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFu7c, BFu7s_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFu7i) C1{ Fs:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7s_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFu7i, BFu7s_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFu7ll) C1{ Fs:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7s_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFu7ll, BFu7s_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7s_BFu7s_BFu7s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7s_BFu7s_BFu7s_BFu7s) C1{ Fs:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7s_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7s_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu7s_BFu7s, BFu7s_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7s_BFu7s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu7s_BFu8c) C1{ Fs:7 Fs:7 Fc:8}



static void Test_BFu7s_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu8c, BFu7s_BFu7s_BFu8c)
//============================================================================


struct  BFu7s_BFu7s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu7s_BFu8i) C1{ Fs:7 Fs:7 Fi:8}



static void Test_BFu7s_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu8i, BFu7s_BFu7s_BFu8i)
//============================================================================


struct  BFu7s_BFu7s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu7s_BFu8ll) C1{ Fs:7 Fs:7 FL:8}



static void Test_BFu7s_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7s_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu8ll, BFu7s_BFu7s_BFu8ll)
//============================================================================


struct  BFu7s_BFu7s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu7s_BFu8s) C1{ Fs:7 Fs:7 Fs:8}



static void Test_BFu7s_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu8s, BFu7s_BFu7s_BFu8s)
//============================================================================


struct  BFu7s_BFu7s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu7s_BFu9i) C1{ Fs:7 Fs:7 Fi:9}



static void Test_BFu7s_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu9i, BFu7s_BFu7s_BFu9i)
//============================================================================


struct  BFu7s_BFu7s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu7s_BFu9ll) C1{ Fs:7 Fs:7 FL:9}



static void Test_BFu7s_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7s_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu9ll, BFu7s_BFu7s_BFu9ll)
//============================================================================


struct  BFu7s_BFu7s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu7s_BFu9s) C1{ Fs:7 Fs:7 Fs:9}



static void Test_BFu7s_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_BFu9s, BFu7s_BFu7s_BFu9s)
//============================================================================


struct  BFu7s_BFu7s_C  {
  unsigned short v1:7;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu7s_BFu7s_C) C1{ Fs:7 Fs:7 Fc}



static void Test_BFu7s_BFu7s_C()
{
  {
    init_simple_test("BFu7s_BFu7s_C");
    static STRUCT_IF_C BFu7s_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_C, BFu7s_BFu7s_C)
//============================================================================


struct  BFu7s_BFu7s_D  {
  unsigned short v1:7;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu7s_BFu7s_D) C1{ Fs:7 Fs:7 FL}



static void Test_BFu7s_BFu7s_D()
{
  {
    init_simple_test("BFu7s_BFu7s_D");
    static STRUCT_IF_C BFu7s_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_D, BFu7s_BFu7s_D)
//============================================================================


struct  BFu7s_BFu7s_F  {
  unsigned short v1:7;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu7s_BFu7s_F) C1{ Fs:7 Fs:7 Fi}



static void Test_BFu7s_BFu7s_F()
{
  {
    init_simple_test("BFu7s_BFu7s_F");
    static STRUCT_IF_C BFu7s_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_F, BFu7s_BFu7s_F)
//============================================================================


struct  BFu7s_BFu7s_I  {
  unsigned short v1:7;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu7s_BFu7s_I) C1{ Fs:7 Fs:7 Fi}



static void Test_BFu7s_BFu7s_I()
{
  {
    init_simple_test("BFu7s_BFu7s_I");
    static STRUCT_IF_C BFu7s_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_I, BFu7s_BFu7s_I)
//============================================================================


struct  BFu7s_BFu7s_Ip  {
  unsigned short v1:7;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu7s_BFu7s_Ip) C1{ Fs:7 Fs:7 Fp}



static void Test_BFu7s_BFu7s_Ip()
{
  {
    init_simple_test("BFu7s_BFu7s_Ip");
    static STRUCT_IF_C BFu7s_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Ip, BFu7s_BFu7s_Ip)
//============================================================================


struct  BFu7s_BFu7s_L  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu7s_L) C1{ Fs:7 Fs:7 FL}



static void Test_BFu7s_BFu7s_L()
{
  {
    init_simple_test("BFu7s_BFu7s_L");
    static STRUCT_IF_C BFu7s_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_L, BFu7s_BFu7s_L)
//============================================================================


struct  BFu7s_BFu7s_S  {
  unsigned short v1:7;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu7s_BFu7s_S) C1{ Fs:7 Fs:7 Fs}



static void Test_BFu7s_BFu7s_S()
{
  {
    init_simple_test("BFu7s_BFu7s_S");
    static STRUCT_IF_C BFu7s_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_S, BFu7s_BFu7s_S)
//============================================================================


struct  BFu7s_BFu7s_Uc  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu7s_Uc) C1{ Fs:7 Fs:7 Fc}



static void Test_BFu7s_BFu7s_Uc()
{
  {
    init_simple_test("BFu7s_BFu7s_Uc");
    static STRUCT_IF_C BFu7s_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Uc, BFu7s_BFu7s_Uc)
//============================================================================


struct  BFu7s_BFu7s_Ui  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu7s_Ui) C1{ Fs:7 Fs:7 Fi}



static void Test_BFu7s_BFu7s_Ui()
{
  {
    init_simple_test("BFu7s_BFu7s_Ui");
    static STRUCT_IF_C BFu7s_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Ui, BFu7s_BFu7s_Ui)
//============================================================================


struct  BFu7s_BFu7s_Ul  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu7s_Ul) C1{ Fs:7 Fs:7 FL}



static void Test_BFu7s_BFu7s_Ul()
{
  {
    init_simple_test("BFu7s_BFu7s_Ul");
    static STRUCT_IF_C BFu7s_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Ul, BFu7s_BFu7s_Ul)
//============================================================================


struct  BFu7s_BFu7s_Us  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu7s_Us) C1{ Fs:7 Fs:7 Fs}



static void Test_BFu7s_BFu7s_Us()
{
  {
    init_simple_test("BFu7s_BFu7s_Us");
    static STRUCT_IF_C BFu7s_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Us, BFu7s_BFu7s_Us)
//============================================================================


struct  BFu7s_BFu7s_Vp  {
  unsigned short v1:7;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu7s_BFu7s_Vp) C1{ Fs:7 Fs:7 Fp}



static void Test_BFu7s_BFu7s_Vp()
{
  {
    init_simple_test("BFu7s_BFu7s_Vp");
    static STRUCT_IF_C BFu7s_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu7s_Vp, BFu7s_BFu7s_Vp)
//============================================================================


struct  BFu7s_BFu8c  {
  unsigned short v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu7s_BFu8c) C1{ Fs:7 Fc:8}



static void Test_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c, BFu7s_BFu8c)
//============================================================================


struct  BFu7s_BFu8c_BFu15i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu8c_BFu15i) C1{ Fs:7 Fc:8 Fi:15}



static void Test_BFu7s_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu15i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu15i, BFu7s_BFu8c_BFu15i)
//============================================================================


struct  BFu7s_BFu8c_BFu15ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu8c_BFu15ll) C1{ Fs:7 Fc:8 FL:15}



static void Test_BFu7s_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu15ll, BFu7s_BFu8c_BFu15ll)
//============================================================================


struct  BFu7s_BFu8c_BFu15s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu8c_BFu15s) C1{ Fs:7 Fc:8 Fs:15}



static void Test_BFu7s_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu15s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu15s, BFu7s_BFu8c_BFu15s)
//============================================================================


struct  BFu7s_BFu8c_BFu16i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu8c_BFu16i) C1{ Fs:7 Fc:8 Fi:16}



static void Test_BFu7s_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu16i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu16i, BFu7s_BFu8c_BFu16i)
//============================================================================


struct  BFu7s_BFu8c_BFu16ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu8c_BFu16ll) C1{ Fs:7 Fc:8 FL:16}



static void Test_BFu7s_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu16ll, BFu7s_BFu8c_BFu16ll)
//============================================================================


struct  BFu7s_BFu8c_BFu16s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu8c_BFu16s) C1{ Fs:7 Fc:8 Fs:16}



static void Test_BFu7s_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu16s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu16s, BFu7s_BFu8c_BFu16s)
//============================================================================


struct  BFu7s_BFu8c_BFu17i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu8c_BFu17i) C1{ Fs:7 Fc:8 Fi:17}



static void Test_BFu7s_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu17i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu17i, BFu7s_BFu8c_BFu17i)
//============================================================================


struct  BFu7s_BFu8c_BFu17ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu8c_BFu17ll) C1{ Fs:7 Fc:8 FL:17}



static void Test_BFu7s_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu17ll, BFu7s_BFu8c_BFu17ll)
//============================================================================


struct  BFu7s_BFu8c_BFu1c  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu8c_BFu1c) C1{ Fs:7 Fc:8 Fc:1}



static void Test_BFu7s_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu1c");
    static STRUCT_IF_C BFu7s_BFu8c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu1c, BFu7s_BFu8c_BFu1c)
//============================================================================


struct  BFu7s_BFu8c_BFu1i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu8c_BFu1i) C1{ Fs:7 Fc:8 Fi:1}



static void Test_BFu7s_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu1i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu1i, BFu7s_BFu8c_BFu1i)
//============================================================================


struct  BFu7s_BFu8c_BFu1ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu8c_BFu1ll) C1{ Fs:7 Fc:8 FL:1}



static void Test_BFu7s_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu1ll, BFu7s_BFu8c_BFu1ll)
//============================================================================


struct  BFu7s_BFu8c_BFu1s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu8c_BFu1s) C1{ Fs:7 Fc:8 Fs:1}



static void Test_BFu7s_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu1s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu1s, BFu7s_BFu8c_BFu1s)
//============================================================================


struct  BFu7s_BFu8c_BFu31i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu8c_BFu31i) C1{ Fs:7 Fc:8 Fi:31}



static void Test_BFu7s_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu31i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu31i, BFu7s_BFu8c_BFu31i)
//============================================================================


struct  BFu7s_BFu8c_BFu31ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu8c_BFu31ll) C1{ Fs:7 Fc:8 FL:31}



static void Test_BFu7s_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu31ll, BFu7s_BFu8c_BFu31ll)
//============================================================================


struct  BFu7s_BFu8c_BFu32i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu8c_BFu32i) C1{ Fs:7 Fc:8 Fi:32}



static void Test_BFu7s_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu32i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu32i, BFu7s_BFu8c_BFu32i)
//============================================================================


struct  BFu7s_BFu8c_BFu32ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu8c_BFu32ll) C1{ Fs:7 Fc:8 FL:32}



static void Test_BFu7s_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu32ll, BFu7s_BFu8c_BFu32ll)
//============================================================================


struct  BFu7s_BFu8c_BFu33  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu8c_BFu33) C1{ Fs:7 Fc:8 FL:33}



static void Test_BFu7s_BFu8c_BFu33()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu33");
    static STRUCT_IF_C BFu7s_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu33, BFu7s_BFu8c_BFu33)
//============================================================================


struct  BFu7s_BFu8c_BFu7c  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu8c_BFu7c) C1{ Fs:7 Fc:8 Fc:7}



static void Test_BFu7s_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu7c");
    static STRUCT_IF_C BFu7s_BFu8c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu7c, BFu7s_BFu8c_BFu7c)
//============================================================================


struct  BFu7s_BFu8c_BFu7i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu8c_BFu7i) C1{ Fs:7 Fc:8 Fi:7}



static void Test_BFu7s_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu7i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu7i, BFu7s_BFu8c_BFu7i)
//============================================================================


struct  BFu7s_BFu8c_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu8c_BFu7ll) C1{ Fs:7 Fc:8 FL:7}



static void Test_BFu7s_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu7ll, BFu7s_BFu8c_BFu7ll)
//============================================================================


struct  BFu7s_BFu8c_BFu7s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu8c_BFu7s) C1{ Fs:7 Fc:8 Fs:7}



static void Test_BFu7s_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu7s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu7s, BFu7s_BFu8c_BFu7s)
//============================================================================


struct  BFu7s_BFu8c_BFu8c  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu8c_BFu8c) C1{ Fs:7 Fc:8 Fc:8}



static void Test_BFu7s_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu8c");
    static STRUCT_IF_C BFu7s_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu8c, BFu7s_BFu8c_BFu8c)
//============================================================================


struct  BFu7s_BFu8c_BFu8i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu8c_BFu8i) C1{ Fs:7 Fc:8 Fi:8}



static void Test_BFu7s_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu8i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu8i, BFu7s_BFu8c_BFu8i)
//============================================================================


struct  BFu7s_BFu8c_BFu8ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu8c_BFu8ll) C1{ Fs:7 Fc:8 FL:8}



static void Test_BFu7s_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu8ll, BFu7s_BFu8c_BFu8ll)
//============================================================================


struct  BFu7s_BFu8c_BFu8s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu8c_BFu8s) C1{ Fs:7 Fc:8 Fs:8}



static void Test_BFu7s_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu8s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu8s, BFu7s_BFu8c_BFu8s)
//============================================================================


struct  BFu7s_BFu8c_BFu9i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu8c_BFu9i) C1{ Fs:7 Fc:8 Fi:9}



static void Test_BFu7s_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu9i");
    static STRUCT_IF_C BFu7s_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu9i, BFu7s_BFu8c_BFu9i)
//============================================================================


struct  BFu7s_BFu8c_BFu9ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu8c_BFu9ll) C1{ Fs:7 Fc:8 FL:9}



static void Test_BFu7s_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu9ll, BFu7s_BFu8c_BFu9ll)
//============================================================================


struct  BFu7s_BFu8c_BFu9s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu8c_BFu9s) C1{ Fs:7 Fc:8 Fs:9}



static void Test_BFu7s_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu9s");
    static STRUCT_IF_C BFu7s_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_BFu9s, BFu7s_BFu8c_BFu9s)
//============================================================================


struct  BFu7s_BFu8c_C  {
  unsigned short v1:7;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu7s_BFu8c_C) C1{ Fs:7 Fc:8 Fc}



static void Test_BFu7s_BFu8c_C()
{
  {
    init_simple_test("BFu7s_BFu8c_C");
    static STRUCT_IF_C BFu7s_BFu8c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_C, BFu7s_BFu8c_C)
//============================================================================


struct  BFu7s_BFu8c_D  {
  unsigned short v1:7;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu7s_BFu8c_D) C1{ Fs:7 Fc:8 FL}



static void Test_BFu7s_BFu8c_D()
{
  {
    init_simple_test("BFu7s_BFu8c_D");
    static STRUCT_IF_C BFu7s_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_D, BFu7s_BFu8c_D)
//============================================================================


struct  BFu7s_BFu8c_F  {
  unsigned short v1:7;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu7s_BFu8c_F) C1{ Fs:7 Fc:8 Fi}



static void Test_BFu7s_BFu8c_F()
{
  {
    init_simple_test("BFu7s_BFu8c_F");
    static STRUCT_IF_C BFu7s_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_F, BFu7s_BFu8c_F)
//============================================================================


struct  BFu7s_BFu8c_I  {
  unsigned short v1:7;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu7s_BFu8c_I) C1{ Fs:7 Fc:8 Fi}



static void Test_BFu7s_BFu8c_I()
{
  {
    init_simple_test("BFu7s_BFu8c_I");
    static STRUCT_IF_C BFu7s_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_I, BFu7s_BFu8c_I)
//============================================================================


struct  BFu7s_BFu8c_Ip  {
  unsigned short v1:7;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu7s_BFu8c_Ip) C1{ Fs:7 Fc:8 Fp}



static void Test_BFu7s_BFu8c_Ip()
{
  {
    init_simple_test("BFu7s_BFu8c_Ip");
    static STRUCT_IF_C BFu7s_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Ip, BFu7s_BFu8c_Ip)
//============================================================================


struct  BFu7s_BFu8c_L  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu8c_L) C1{ Fs:7 Fc:8 FL}



static void Test_BFu7s_BFu8c_L()
{
  {
    init_simple_test("BFu7s_BFu8c_L");
    static STRUCT_IF_C BFu7s_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_L, BFu7s_BFu8c_L)
//============================================================================


struct  BFu7s_BFu8c_S  {
  unsigned short v1:7;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu7s_BFu8c_S) C1{ Fs:7 Fc:8 Fs}



static void Test_BFu7s_BFu8c_S()
{
  {
    init_simple_test("BFu7s_BFu8c_S");
    static STRUCT_IF_C BFu7s_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_S, BFu7s_BFu8c_S)
//============================================================================


struct  BFu7s_BFu8c_Uc  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu8c_Uc) C1{ Fs:7 Fc:8 Fc}



static void Test_BFu7s_BFu8c_Uc()
{
  {
    init_simple_test("BFu7s_BFu8c_Uc");
    static STRUCT_IF_C BFu7s_BFu8c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Uc, BFu7s_BFu8c_Uc)
//============================================================================


struct  BFu7s_BFu8c_Ui  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu8c_Ui) C1{ Fs:7 Fc:8 Fi}



static void Test_BFu7s_BFu8c_Ui()
{
  {
    init_simple_test("BFu7s_BFu8c_Ui");
    static STRUCT_IF_C BFu7s_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Ui, BFu7s_BFu8c_Ui)
//============================================================================


struct  BFu7s_BFu8c_Ul  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu8c_Ul) C1{ Fs:7 Fc:8 FL}



static void Test_BFu7s_BFu8c_Ul()
{
  {
    init_simple_test("BFu7s_BFu8c_Ul");
    static STRUCT_IF_C BFu7s_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Ul, BFu7s_BFu8c_Ul)
//============================================================================


struct  BFu7s_BFu8c_Us  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu8c_Us) C1{ Fs:7 Fc:8 Fs}



static void Test_BFu7s_BFu8c_Us()
{
  {
    init_simple_test("BFu7s_BFu8c_Us");
    static STRUCT_IF_C BFu7s_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Us, BFu7s_BFu8c_Us)
//============================================================================


struct  BFu7s_BFu8c_Vp  {
  unsigned short v1:7;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu7s_BFu8c_Vp) C1{ Fs:7 Fc:8 Fp}



static void Test_BFu7s_BFu8c_Vp()
{
  {
    init_simple_test("BFu7s_BFu8c_Vp");
    static STRUCT_IF_C BFu7s_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8c_Vp, BFu7s_BFu8c_Vp)
//============================================================================


struct  BFu7s_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu7s_BFu8i) C1{ Fs:7 Fi:8}



static void Test_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i, BFu7s_BFu8i)
//============================================================================


struct  BFu7s_BFu8i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu8i_BFu15i) C1{ Fs:7 Fi:8 Fi:15}



static void Test_BFu7s_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu15i, BFu7s_BFu8i_BFu15i)
//============================================================================


struct  BFu7s_BFu8i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu8i_BFu15ll) C1{ Fs:7 Fi:8 FL:15}



static void Test_BFu7s_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu15ll, BFu7s_BFu8i_BFu15ll)
//============================================================================


struct  BFu7s_BFu8i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu8i_BFu15s) C1{ Fs:7 Fi:8 Fs:15}



static void Test_BFu7s_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu15s, BFu7s_BFu8i_BFu15s)
//============================================================================


struct  BFu7s_BFu8i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu8i_BFu16i) C1{ Fs:7 Fi:8 Fi:16}



static void Test_BFu7s_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu16i, BFu7s_BFu8i_BFu16i)
//============================================================================


struct  BFu7s_BFu8i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu8i_BFu16ll) C1{ Fs:7 Fi:8 FL:16}



static void Test_BFu7s_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu16ll, BFu7s_BFu8i_BFu16ll)
//============================================================================


struct  BFu7s_BFu8i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu8i_BFu16s) C1{ Fs:7 Fi:8 Fs:16}



static void Test_BFu7s_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu16s, BFu7s_BFu8i_BFu16s)
//============================================================================


struct  BFu7s_BFu8i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu8i_BFu17i) C1{ Fs:7 Fi:8 Fi:17}



static void Test_BFu7s_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu17i, BFu7s_BFu8i_BFu17i)
//============================================================================


struct  BFu7s_BFu8i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu8i_BFu17ll) C1{ Fs:7 Fi:8 FL:17}



static void Test_BFu7s_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu17ll, BFu7s_BFu8i_BFu17ll)
//============================================================================


struct  BFu7s_BFu8i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu8i_BFu1c) C1{ Fs:7 Fi:8 Fc:1}



static void Test_BFu7s_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu1c, BFu7s_BFu8i_BFu1c)
//============================================================================


struct  BFu7s_BFu8i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu8i_BFu1i) C1{ Fs:7 Fi:8 Fi:1}



static void Test_BFu7s_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu1i, BFu7s_BFu8i_BFu1i)
//============================================================================


struct  BFu7s_BFu8i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu8i_BFu1ll) C1{ Fs:7 Fi:8 FL:1}



static void Test_BFu7s_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu1ll, BFu7s_BFu8i_BFu1ll)
//============================================================================


struct  BFu7s_BFu8i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu8i_BFu1s) C1{ Fs:7 Fi:8 Fs:1}



static void Test_BFu7s_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu1s, BFu7s_BFu8i_BFu1s)
//============================================================================


struct  BFu7s_BFu8i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu8i_BFu31i) C1{ Fs:7 Fi:8 Fi:31}



static void Test_BFu7s_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu31i, BFu7s_BFu8i_BFu31i)
//============================================================================


struct  BFu7s_BFu8i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu8i_BFu31ll) C1{ Fs:7 Fi:8 FL:31}



static void Test_BFu7s_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu31ll, BFu7s_BFu8i_BFu31ll)
//============================================================================


struct  BFu7s_BFu8i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu8i_BFu32i) C1{ Fs:7 Fi:8 Fi:32}



static void Test_BFu7s_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu32i, BFu7s_BFu8i_BFu32i)
//============================================================================


struct  BFu7s_BFu8i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu8i_BFu32ll) C1{ Fs:7 Fi:8 FL:32}



static void Test_BFu7s_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu32ll, BFu7s_BFu8i_BFu32ll)
//============================================================================


struct  BFu7s_BFu8i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu8i_BFu33) C1{ Fs:7 Fi:8 FL:33}



static void Test_BFu7s_BFu8i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu33");
    static STRUCT_IF_C BFu7s_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu33, BFu7s_BFu8i_BFu33)
//============================================================================


struct  BFu7s_BFu8i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu8i_BFu7c) C1{ Fs:7 Fi:8 Fc:7}



static void Test_BFu7s_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu7c, BFu7s_BFu8i_BFu7c)
//============================================================================


struct  BFu7s_BFu8i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu8i_BFu7i) C1{ Fs:7 Fi:8 Fi:7}



static void Test_BFu7s_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu7i, BFu7s_BFu8i_BFu7i)
//============================================================================


struct  BFu7s_BFu8i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu8i_BFu7ll) C1{ Fs:7 Fi:8 FL:7}



static void Test_BFu7s_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu7ll, BFu7s_BFu8i_BFu7ll)
//============================================================================


struct  BFu7s_BFu8i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu8i_BFu7s) C1{ Fs:7 Fi:8 Fs:7}



static void Test_BFu7s_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu7s, BFu7s_BFu8i_BFu7s)
//============================================================================


struct  BFu7s_BFu8i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu8i_BFu8c) C1{ Fs:7 Fi:8 Fc:8}



static void Test_BFu7s_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu8c, BFu7s_BFu8i_BFu8c)
//============================================================================


struct  BFu7s_BFu8i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu8i_BFu8i) C1{ Fs:7 Fi:8 Fi:8}



static void Test_BFu7s_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu8i, BFu7s_BFu8i_BFu8i)
//============================================================================


struct  BFu7s_BFu8i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu8i_BFu8ll) C1{ Fs:7 Fi:8 FL:8}



static void Test_BFu7s_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu8ll, BFu7s_BFu8i_BFu8ll)
//============================================================================


struct  BFu7s_BFu8i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu8i_BFu8s) C1{ Fs:7 Fi:8 Fs:8}



static void Test_BFu7s_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu8s, BFu7s_BFu8i_BFu8s)
//============================================================================


struct  BFu7s_BFu8i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu8i_BFu9i) C1{ Fs:7 Fi:8 Fi:9}



static void Test_BFu7s_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu9i, BFu7s_BFu8i_BFu9i)
//============================================================================


struct  BFu7s_BFu8i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu8i_BFu9ll) C1{ Fs:7 Fi:8 FL:9}



static void Test_BFu7s_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu9ll, BFu7s_BFu8i_BFu9ll)
//============================================================================


struct  BFu7s_BFu8i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu8i_BFu9s) C1{ Fs:7 Fi:8 Fs:9}



static void Test_BFu7s_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_BFu9s, BFu7s_BFu8i_BFu9s)
//============================================================================


struct  BFu7s_BFu8i_C  {
  unsigned short v1:7;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu7s_BFu8i_C) C1{ Fs:7 Fi:8 Fc}



static void Test_BFu7s_BFu8i_C()
{
  {
    init_simple_test("BFu7s_BFu8i_C");
    static STRUCT_IF_C BFu7s_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_C, BFu7s_BFu8i_C)
//============================================================================


struct  BFu7s_BFu8i_D  {
  unsigned short v1:7;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu7s_BFu8i_D) C1{ Fs:7 Fi:8 FL}



static void Test_BFu7s_BFu8i_D()
{
  {
    init_simple_test("BFu7s_BFu8i_D");
    static STRUCT_IF_C BFu7s_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_D, BFu7s_BFu8i_D)
//============================================================================


struct  BFu7s_BFu8i_F  {
  unsigned short v1:7;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu7s_BFu8i_F) C1{ Fs:7 Fi:8 Fi}



static void Test_BFu7s_BFu8i_F()
{
  {
    init_simple_test("BFu7s_BFu8i_F");
    static STRUCT_IF_C BFu7s_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_F, BFu7s_BFu8i_F)
//============================================================================


struct  BFu7s_BFu8i_I  {
  unsigned short v1:7;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu7s_BFu8i_I) C1{ Fs:7 Fi:8 Fi}



static void Test_BFu7s_BFu8i_I()
{
  {
    init_simple_test("BFu7s_BFu8i_I");
    static STRUCT_IF_C BFu7s_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_I, BFu7s_BFu8i_I)
//============================================================================


struct  BFu7s_BFu8i_Ip  {
  unsigned short v1:7;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu7s_BFu8i_Ip) C1{ Fs:7 Fi:8 Fp}



static void Test_BFu7s_BFu8i_Ip()
{
  {
    init_simple_test("BFu7s_BFu8i_Ip");
    static STRUCT_IF_C BFu7s_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Ip, BFu7s_BFu8i_Ip)
//============================================================================


struct  BFu7s_BFu8i_L  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu8i_L) C1{ Fs:7 Fi:8 FL}



static void Test_BFu7s_BFu8i_L()
{
  {
    init_simple_test("BFu7s_BFu8i_L");
    static STRUCT_IF_C BFu7s_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_L, BFu7s_BFu8i_L)
//============================================================================


struct  BFu7s_BFu8i_S  {
  unsigned short v1:7;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu7s_BFu8i_S) C1{ Fs:7 Fi:8 Fs}



static void Test_BFu7s_BFu8i_S()
{
  {
    init_simple_test("BFu7s_BFu8i_S");
    static STRUCT_IF_C BFu7s_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_S, BFu7s_BFu8i_S)
//============================================================================


struct  BFu7s_BFu8i_Uc  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu8i_Uc) C1{ Fs:7 Fi:8 Fc}



static void Test_BFu7s_BFu8i_Uc()
{
  {
    init_simple_test("BFu7s_BFu8i_Uc");
    static STRUCT_IF_C BFu7s_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Uc, BFu7s_BFu8i_Uc)
//============================================================================


struct  BFu7s_BFu8i_Ui  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu8i_Ui) C1{ Fs:7 Fi:8 Fi}



static void Test_BFu7s_BFu8i_Ui()
{
  {
    init_simple_test("BFu7s_BFu8i_Ui");
    static STRUCT_IF_C BFu7s_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Ui, BFu7s_BFu8i_Ui)
//============================================================================


struct  BFu7s_BFu8i_Ul  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu8i_Ul) C1{ Fs:7 Fi:8 FL}



static void Test_BFu7s_BFu8i_Ul()
{
  {
    init_simple_test("BFu7s_BFu8i_Ul");
    static STRUCT_IF_C BFu7s_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Ul, BFu7s_BFu8i_Ul)
//============================================================================


struct  BFu7s_BFu8i_Us  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu8i_Us) C1{ Fs:7 Fi:8 Fs}



static void Test_BFu7s_BFu8i_Us()
{
  {
    init_simple_test("BFu7s_BFu8i_Us");
    static STRUCT_IF_C BFu7s_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Us, BFu7s_BFu8i_Us)
//============================================================================


struct  BFu7s_BFu8i_Vp  {
  unsigned short v1:7;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu7s_BFu8i_Vp) C1{ Fs:7 Fi:8 Fp}



static void Test_BFu7s_BFu8i_Vp()
{
  {
    init_simple_test("BFu7s_BFu8i_Vp");
    static STRUCT_IF_C BFu7s_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8i_Vp, BFu7s_BFu8i_Vp)
//============================================================================


struct  BFu7s_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu7s_BFu8ll) C1{ Fs:7 FL:8}



static void Test_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll, BFu7s_BFu8ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu8ll_BFu15i) C1{ Fs:7 FL:8 Fi:15}



static void Test_BFu7s_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu15i, BFu7s_BFu8ll_BFu15i)
//============================================================================


struct  BFu7s_BFu8ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu8ll_BFu15ll) C1{ Fs:7 FL:8 FL:15}



static void Test_BFu7s_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu15ll, BFu7s_BFu8ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu8ll_BFu15s) C1{ Fs:7 FL:8 Fs:15}



static void Test_BFu7s_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu15s, BFu7s_BFu8ll_BFu15s)
//============================================================================


struct  BFu7s_BFu8ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu8ll_BFu16i) C1{ Fs:7 FL:8 Fi:16}



static void Test_BFu7s_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu16i, BFu7s_BFu8ll_BFu16i)
//============================================================================


struct  BFu7s_BFu8ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu8ll_BFu16ll) C1{ Fs:7 FL:8 FL:16}



static void Test_BFu7s_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu16ll, BFu7s_BFu8ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu8ll_BFu16s) C1{ Fs:7 FL:8 Fs:16}



static void Test_BFu7s_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu16s, BFu7s_BFu8ll_BFu16s)
//============================================================================


struct  BFu7s_BFu8ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu8ll_BFu17i) C1{ Fs:7 FL:8 Fi:17}



static void Test_BFu7s_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu17i, BFu7s_BFu8ll_BFu17i)
//============================================================================


struct  BFu7s_BFu8ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu8ll_BFu17ll) C1{ Fs:7 FL:8 FL:17}



static void Test_BFu7s_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu17ll, BFu7s_BFu8ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu8ll_BFu1c) C1{ Fs:7 FL:8 Fc:1}



static void Test_BFu7s_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu1c, BFu7s_BFu8ll_BFu1c)
//============================================================================


struct  BFu7s_BFu8ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu8ll_BFu1i) C1{ Fs:7 FL:8 Fi:1}



static void Test_BFu7s_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu1i, BFu7s_BFu8ll_BFu1i)
//============================================================================


struct  BFu7s_BFu8ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu8ll_BFu1ll) C1{ Fs:7 FL:8 FL:1}



static void Test_BFu7s_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu1ll, BFu7s_BFu8ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu8ll_BFu1s) C1{ Fs:7 FL:8 Fs:1}



static void Test_BFu7s_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu1s, BFu7s_BFu8ll_BFu1s)
//============================================================================


struct  BFu7s_BFu8ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu8ll_BFu31i) C1{ Fs:7 FL:8 Fi:31}



static void Test_BFu7s_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu31i, BFu7s_BFu8ll_BFu31i)
//============================================================================


struct  BFu7s_BFu8ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu8ll_BFu31ll) C1{ Fs:7 FL:8 FL:31}



static void Test_BFu7s_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu31ll, BFu7s_BFu8ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu8ll_BFu32i) C1{ Fs:7 FL:8 Fi:32}



static void Test_BFu7s_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu32i, BFu7s_BFu8ll_BFu32i)
//============================================================================


struct  BFu7s_BFu8ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu8ll_BFu32ll) C1{ Fs:7 FL:8 FL:32}



static void Test_BFu7s_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu32ll, BFu7s_BFu8ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu8ll_BFu33) C1{ Fs:7 FL:8 FL:33}



static void Test_BFu7s_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu33, BFu7s_BFu8ll_BFu33)
//============================================================================


struct  BFu7s_BFu8ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu8ll_BFu7c) C1{ Fs:7 FL:8 Fc:7}



static void Test_BFu7s_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu7c, BFu7s_BFu8ll_BFu7c)
//============================================================================


struct  BFu7s_BFu8ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu8ll_BFu7i) C1{ Fs:7 FL:8 Fi:7}



static void Test_BFu7s_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu7i, BFu7s_BFu8ll_BFu7i)
//============================================================================


struct  BFu7s_BFu8ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu8ll_BFu7ll) C1{ Fs:7 FL:8 FL:7}



static void Test_BFu7s_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu7ll, BFu7s_BFu8ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu8ll_BFu7s) C1{ Fs:7 FL:8 Fs:7}



static void Test_BFu7s_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu7s, BFu7s_BFu8ll_BFu7s)
//============================================================================


struct  BFu7s_BFu8ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu8ll_BFu8c) C1{ Fs:7 FL:8 Fc:8}



static void Test_BFu7s_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu8c, BFu7s_BFu8ll_BFu8c)
//============================================================================


struct  BFu7s_BFu8ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu8ll_BFu8i) C1{ Fs:7 FL:8 Fi:8}



static void Test_BFu7s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu8i, BFu7s_BFu8ll_BFu8i)
//============================================================================


struct  BFu7s_BFu8ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu8ll_BFu8ll) C1{ Fs:7 FL:8 FL:8}



static void Test_BFu7s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu8ll, BFu7s_BFu8ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu8ll_BFu8s) C1{ Fs:7 FL:8 Fs:8}



static void Test_BFu7s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu8s, BFu7s_BFu8ll_BFu8s)
//============================================================================


struct  BFu7s_BFu8ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu8ll_BFu9i) C1{ Fs:7 FL:8 Fi:9}



static void Test_BFu7s_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu9i, BFu7s_BFu8ll_BFu9i)
//============================================================================


struct  BFu7s_BFu8ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu8ll_BFu9ll) C1{ Fs:7 FL:8 FL:9}



static void Test_BFu7s_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu9ll, BFu7s_BFu8ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu8ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu8ll_BFu9s) C1{ Fs:7 FL:8 Fs:9}



static void Test_BFu7s_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_BFu9s, BFu7s_BFu8ll_BFu9s)
//============================================================================


struct  BFu7s_BFu8ll_C  {
  unsigned short v1:7;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu7s_BFu8ll_C) C1{ Fs:7 FL:8 Fc}



static void Test_BFu7s_BFu8ll_C()
{
  {
    init_simple_test("BFu7s_BFu8ll_C");
    static STRUCT_IF_C BFu7s_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_C, BFu7s_BFu8ll_C)
//============================================================================


struct  BFu7s_BFu8ll_D  {
  unsigned short v1:7;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu7s_BFu8ll_D) C1{ Fs:7 FL:8 FL}



static void Test_BFu7s_BFu8ll_D()
{
  {
    init_simple_test("BFu7s_BFu8ll_D");
    static STRUCT_IF_C BFu7s_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_D, BFu7s_BFu8ll_D)
//============================================================================


struct  BFu7s_BFu8ll_F  {
  unsigned short v1:7;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu7s_BFu8ll_F) C1{ Fs:7 FL:8 Fi}



static void Test_BFu7s_BFu8ll_F()
{
  {
    init_simple_test("BFu7s_BFu8ll_F");
    static STRUCT_IF_C BFu7s_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_F, BFu7s_BFu8ll_F)
//============================================================================


struct  BFu7s_BFu8ll_I  {
  unsigned short v1:7;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu7s_BFu8ll_I) C1{ Fs:7 FL:8 Fi}



static void Test_BFu7s_BFu8ll_I()
{
  {
    init_simple_test("BFu7s_BFu8ll_I");
    static STRUCT_IF_C BFu7s_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_I, BFu7s_BFu8ll_I)
//============================================================================


struct  BFu7s_BFu8ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu7s_BFu8ll_Ip) C1{ Fs:7 FL:8 Fp}



static void Test_BFu7s_BFu8ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu8ll_Ip");
    static STRUCT_IF_C BFu7s_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Ip, BFu7s_BFu8ll_Ip)
//============================================================================


struct  BFu7s_BFu8ll_L  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu8ll_L) C1{ Fs:7 FL:8 FL}



static void Test_BFu7s_BFu8ll_L()
{
  {
    init_simple_test("BFu7s_BFu8ll_L");
    static STRUCT_IF_C BFu7s_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_L, BFu7s_BFu8ll_L)
//============================================================================


struct  BFu7s_BFu8ll_S  {
  unsigned short v1:7;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu7s_BFu8ll_S) C1{ Fs:7 FL:8 Fs}



static void Test_BFu7s_BFu8ll_S()
{
  {
    init_simple_test("BFu7s_BFu8ll_S");
    static STRUCT_IF_C BFu7s_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_S, BFu7s_BFu8ll_S)
//============================================================================


struct  BFu7s_BFu8ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu8ll_Uc) C1{ Fs:7 FL:8 Fc}



static void Test_BFu7s_BFu8ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu8ll_Uc");
    static STRUCT_IF_C BFu7s_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Uc, BFu7s_BFu8ll_Uc)
//============================================================================


struct  BFu7s_BFu8ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu8ll_Ui) C1{ Fs:7 FL:8 Fi}



static void Test_BFu7s_BFu8ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu8ll_Ui");
    static STRUCT_IF_C BFu7s_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Ui, BFu7s_BFu8ll_Ui)
//============================================================================


struct  BFu7s_BFu8ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu8ll_Ul) C1{ Fs:7 FL:8 FL}



static void Test_BFu7s_BFu8ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu8ll_Ul");
    static STRUCT_IF_C BFu7s_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Ul, BFu7s_BFu8ll_Ul)
//============================================================================


struct  BFu7s_BFu8ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu8ll_Us) C1{ Fs:7 FL:8 Fs}



static void Test_BFu7s_BFu8ll_Us()
{
  {
    init_simple_test("BFu7s_BFu8ll_Us");
    static STRUCT_IF_C BFu7s_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Us, BFu7s_BFu8ll_Us)
//============================================================================


struct  BFu7s_BFu8ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu7s_BFu8ll_Vp) C1{ Fs:7 FL:8 Fp}



static void Test_BFu7s_BFu8ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu8ll_Vp");
    static STRUCT_IF_C BFu7s_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8ll_Vp, BFu7s_BFu8ll_Vp)
//============================================================================


struct  BFu7s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu7s_BFu8s) C1{ Fs:7 Fs:8}



static void Test_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s, BFu7s_BFu8s)
//============================================================================


struct  BFu7s_BFu8s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu8s_BFu15i) C1{ Fs:7 Fs:8 Fi:15}



static void Test_BFu7s_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu15i, BFu7s_BFu8s_BFu15i)
//============================================================================


struct  BFu7s_BFu8s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu8s_BFu15ll) C1{ Fs:7 Fs:8 FL:15}



static void Test_BFu7s_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu15ll, BFu7s_BFu8s_BFu15ll)
//============================================================================


struct  BFu7s_BFu8s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu8s_BFu15s) C1{ Fs:7 Fs:8 Fs:15}



static void Test_BFu7s_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu15s, BFu7s_BFu8s_BFu15s)
//============================================================================


struct  BFu7s_BFu8s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu8s_BFu16i) C1{ Fs:7 Fs:8 Fi:16}



static void Test_BFu7s_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu16i, BFu7s_BFu8s_BFu16i)
//============================================================================


struct  BFu7s_BFu8s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu8s_BFu16ll) C1{ Fs:7 Fs:8 FL:16}



static void Test_BFu7s_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu16ll, BFu7s_BFu8s_BFu16ll)
//============================================================================


struct  BFu7s_BFu8s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu8s_BFu16s) C1{ Fs:7 Fs:8 Fs:16}



static void Test_BFu7s_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu16s, BFu7s_BFu8s_BFu16s)
//============================================================================


struct  BFu7s_BFu8s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu8s_BFu17i) C1{ Fs:7 Fs:8 Fi:17}



static void Test_BFu7s_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu17i, BFu7s_BFu8s_BFu17i)
//============================================================================


struct  BFu7s_BFu8s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu8s_BFu17ll) C1{ Fs:7 Fs:8 FL:17}



static void Test_BFu7s_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu17ll, BFu7s_BFu8s_BFu17ll)
//============================================================================


struct  BFu7s_BFu8s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu8s_BFu1c) C1{ Fs:7 Fs:8 Fc:1}



static void Test_BFu7s_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu8s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu1c, BFu7s_BFu8s_BFu1c)
//============================================================================


struct  BFu7s_BFu8s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu8s_BFu1i) C1{ Fs:7 Fs:8 Fi:1}



static void Test_BFu7s_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu1i, BFu7s_BFu8s_BFu1i)
//============================================================================


struct  BFu7s_BFu8s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu8s_BFu1ll) C1{ Fs:7 Fs:8 FL:1}



static void Test_BFu7s_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu1ll, BFu7s_BFu8s_BFu1ll)
//============================================================================


struct  BFu7s_BFu8s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu8s_BFu1s) C1{ Fs:7 Fs:8 Fs:1}



static void Test_BFu7s_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7s_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu1s, BFu7s_BFu8s_BFu1s)
//============================================================================


struct  BFu7s_BFu8s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu8s_BFu31i) C1{ Fs:7 Fs:8 Fi:31}



static void Test_BFu7s_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu31i, BFu7s_BFu8s_BFu31i)
//============================================================================


struct  BFu7s_BFu8s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu8s_BFu31ll) C1{ Fs:7 Fs:8 FL:31}



static void Test_BFu7s_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu31ll, BFu7s_BFu8s_BFu31ll)
//============================================================================


struct  BFu7s_BFu8s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu8s_BFu32i) C1{ Fs:7 Fs:8 Fi:32}



static void Test_BFu7s_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu32i, BFu7s_BFu8s_BFu32i)
//============================================================================


struct  BFu7s_BFu8s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu8s_BFu32ll) C1{ Fs:7 Fs:8 FL:32}



static void Test_BFu7s_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu32ll, BFu7s_BFu8s_BFu32ll)
//============================================================================


struct  BFu7s_BFu8s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu8s_BFu33) C1{ Fs:7 Fs:8 FL:33}



static void Test_BFu7s_BFu8s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu33");
    static STRUCT_IF_C BFu7s_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu33, BFu7s_BFu8s_BFu33)
//============================================================================


struct  BFu7s_BFu8s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu8s_BFu7c) C1{ Fs:7 Fs:8 Fc:7}



static void Test_BFu7s_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu7c, BFu7s_BFu8s_BFu7c)
//============================================================================


struct  BFu7s_BFu8s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu8s_BFu7i) C1{ Fs:7 Fs:8 Fi:7}



static void Test_BFu7s_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu7i, BFu7s_BFu8s_BFu7i)
//============================================================================


struct  BFu7s_BFu8s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu8s_BFu7ll) C1{ Fs:7 Fs:8 FL:7}



static void Test_BFu7s_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu7ll, BFu7s_BFu8s_BFu7ll)
//============================================================================


struct  BFu7s_BFu8s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu8s_BFu7s) C1{ Fs:7 Fs:8 Fs:7}



static void Test_BFu7s_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu7s, BFu7s_BFu8s_BFu7s)
//============================================================================


struct  BFu7s_BFu8s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu8s_BFu8c) C1{ Fs:7 Fs:8 Fc:8}



static void Test_BFu7s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu8c, BFu7s_BFu8s_BFu8c)
//============================================================================


struct  BFu7s_BFu8s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu8s_BFu8i) C1{ Fs:7 Fs:8 Fi:8}



static void Test_BFu7s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu8i, BFu7s_BFu8s_BFu8i)
//============================================================================


struct  BFu7s_BFu8s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu8s_BFu8ll) C1{ Fs:7 Fs:8 FL:8}



static void Test_BFu7s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu8ll, BFu7s_BFu8s_BFu8ll)
//============================================================================


struct  BFu7s_BFu8s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu8s_BFu8s) C1{ Fs:7 Fs:8 Fs:8}



static void Test_BFu7s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu8s, BFu7s_BFu8s_BFu8s)
//============================================================================


struct  BFu7s_BFu8s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu8s_BFu9i) C1{ Fs:7 Fs:8 Fi:9}



static void Test_BFu7s_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu9i, BFu7s_BFu8s_BFu9i)
//============================================================================


struct  BFu7s_BFu8s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu8s_BFu9ll) C1{ Fs:7 Fs:8 FL:9}



static void Test_BFu7s_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu9ll, BFu7s_BFu8s_BFu9ll)
//============================================================================


struct  BFu7s_BFu8s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu8s_BFu9s) C1{ Fs:7 Fs:8 Fs:9}



static void Test_BFu7s_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_BFu9s, BFu7s_BFu8s_BFu9s)
//============================================================================


struct  BFu7s_BFu8s_C  {
  unsigned short v1:7;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu7s_BFu8s_C) C1{ Fs:7 Fs:8 Fc}



static void Test_BFu7s_BFu8s_C()
{
  {
    init_simple_test("BFu7s_BFu8s_C");
    static STRUCT_IF_C BFu7s_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_C, BFu7s_BFu8s_C)
//============================================================================


struct  BFu7s_BFu8s_D  {
  unsigned short v1:7;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu7s_BFu8s_D) C1{ Fs:7 Fs:8 FL}



static void Test_BFu7s_BFu8s_D()
{
  {
    init_simple_test("BFu7s_BFu8s_D");
    static STRUCT_IF_C BFu7s_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_D, BFu7s_BFu8s_D)
//============================================================================


struct  BFu7s_BFu8s_F  {
  unsigned short v1:7;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu7s_BFu8s_F) C1{ Fs:7 Fs:8 Fi}



static void Test_BFu7s_BFu8s_F()
{
  {
    init_simple_test("BFu7s_BFu8s_F");
    static STRUCT_IF_C BFu7s_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_F, BFu7s_BFu8s_F)
//============================================================================


struct  BFu7s_BFu8s_I  {
  unsigned short v1:7;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu7s_BFu8s_I) C1{ Fs:7 Fs:8 Fi}



static void Test_BFu7s_BFu8s_I()
{
  {
    init_simple_test("BFu7s_BFu8s_I");
    static STRUCT_IF_C BFu7s_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_I, BFu7s_BFu8s_I)
//============================================================================


struct  BFu7s_BFu8s_Ip  {
  unsigned short v1:7;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu7s_BFu8s_Ip) C1{ Fs:7 Fs:8 Fp}



static void Test_BFu7s_BFu8s_Ip()
{
  {
    init_simple_test("BFu7s_BFu8s_Ip");
    static STRUCT_IF_C BFu7s_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Ip, BFu7s_BFu8s_Ip)
//============================================================================


struct  BFu7s_BFu8s_L  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu8s_L) C1{ Fs:7 Fs:8 FL}



static void Test_BFu7s_BFu8s_L()
{
  {
    init_simple_test("BFu7s_BFu8s_L");
    static STRUCT_IF_C BFu7s_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_L, BFu7s_BFu8s_L)
//============================================================================


struct  BFu7s_BFu8s_S  {
  unsigned short v1:7;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu7s_BFu8s_S) C1{ Fs:7 Fs:8 Fs}



static void Test_BFu7s_BFu8s_S()
{
  {
    init_simple_test("BFu7s_BFu8s_S");
    static STRUCT_IF_C BFu7s_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_S, BFu7s_BFu8s_S)
//============================================================================


struct  BFu7s_BFu8s_Uc  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu8s_Uc) C1{ Fs:7 Fs:8 Fc}



static void Test_BFu7s_BFu8s_Uc()
{
  {
    init_simple_test("BFu7s_BFu8s_Uc");
    static STRUCT_IF_C BFu7s_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Uc, BFu7s_BFu8s_Uc)
//============================================================================


struct  BFu7s_BFu8s_Ui  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu8s_Ui) C1{ Fs:7 Fs:8 Fi}



static void Test_BFu7s_BFu8s_Ui()
{
  {
    init_simple_test("BFu7s_BFu8s_Ui");
    static STRUCT_IF_C BFu7s_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Ui, BFu7s_BFu8s_Ui)
//============================================================================


struct  BFu7s_BFu8s_Ul  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu8s_Ul) C1{ Fs:7 Fs:8 FL}



static void Test_BFu7s_BFu8s_Ul()
{
  {
    init_simple_test("BFu7s_BFu8s_Ul");
    static STRUCT_IF_C BFu7s_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Ul, BFu7s_BFu8s_Ul)
//============================================================================


struct  BFu7s_BFu8s_Us  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu8s_Us) C1{ Fs:7 Fs:8 Fs}



static void Test_BFu7s_BFu8s_Us()
{
  {
    init_simple_test("BFu7s_BFu8s_Us");
    static STRUCT_IF_C BFu7s_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Us, BFu7s_BFu8s_Us)
//============================================================================


struct  BFu7s_BFu8s_Vp  {
  unsigned short v1:7;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu7s_BFu8s_Vp) C1{ Fs:7 Fs:8 Fp}



static void Test_BFu7s_BFu8s_Vp()
{
  {
    init_simple_test("BFu7s_BFu8s_Vp");
    static STRUCT_IF_C BFu7s_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu8s_Vp, BFu7s_BFu8s_Vp)
//============================================================================


struct  BFu7s_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu7s_BFu9i) C1{ Fs:7 Fi:9}



static void Test_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i, BFu7s_BFu9i)
//============================================================================


struct  BFu7s_BFu9i_BFu15i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu9i_BFu15i) C1{ Fs:7 Fi:9 Fi:15}



static void Test_BFu7s_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu15i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu15i, BFu7s_BFu9i_BFu15i)
//============================================================================


struct  BFu7s_BFu9i_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu9i_BFu15ll) C1{ Fs:7 Fi:9 FL:15}



static void Test_BFu7s_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu15ll, BFu7s_BFu9i_BFu15ll)
//============================================================================


struct  BFu7s_BFu9i_BFu15s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu9i_BFu15s) C1{ Fs:7 Fi:9 Fs:15}



static void Test_BFu7s_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu15s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu15s, BFu7s_BFu9i_BFu15s)
//============================================================================


struct  BFu7s_BFu9i_BFu16i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu9i_BFu16i) C1{ Fs:7 Fi:9 Fi:16}



static void Test_BFu7s_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu16i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu16i, BFu7s_BFu9i_BFu16i)
//============================================================================


struct  BFu7s_BFu9i_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu9i_BFu16ll) C1{ Fs:7 Fi:9 FL:16}



static void Test_BFu7s_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu16ll, BFu7s_BFu9i_BFu16ll)
//============================================================================


struct  BFu7s_BFu9i_BFu16s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu9i_BFu16s) C1{ Fs:7 Fi:9 Fs:16}



static void Test_BFu7s_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu16s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu16s, BFu7s_BFu9i_BFu16s)
//============================================================================


struct  BFu7s_BFu9i_BFu17i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu9i_BFu17i) C1{ Fs:7 Fi:9 Fi:17}



static void Test_BFu7s_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu17i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu17i, BFu7s_BFu9i_BFu17i)
//============================================================================


struct  BFu7s_BFu9i_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu9i_BFu17ll) C1{ Fs:7 Fi:9 FL:17}



static void Test_BFu7s_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu17ll, BFu7s_BFu9i_BFu17ll)
//============================================================================


struct  BFu7s_BFu9i_BFu1c  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu9i_BFu1c) C1{ Fs:7 Fi:9 Fc:1}



static void Test_BFu7s_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu1c");
    static STRUCT_IF_C BFu7s_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu1c, BFu7s_BFu9i_BFu1c)
//============================================================================


struct  BFu7s_BFu9i_BFu1i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu9i_BFu1i) C1{ Fs:7 Fi:9 Fi:1}



static void Test_BFu7s_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu1i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu1i, BFu7s_BFu9i_BFu1i)
//============================================================================


struct  BFu7s_BFu9i_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu9i_BFu1ll) C1{ Fs:7 Fi:9 FL:1}



static void Test_BFu7s_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu1ll, BFu7s_BFu9i_BFu1ll)
//============================================================================


struct  BFu7s_BFu9i_BFu1s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu9i_BFu1s) C1{ Fs:7 Fi:9 Fs:1}



static void Test_BFu7s_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu1s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu1s, BFu7s_BFu9i_BFu1s)
//============================================================================


struct  BFu7s_BFu9i_BFu31i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu9i_BFu31i) C1{ Fs:7 Fi:9 Fi:31}



static void Test_BFu7s_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu31i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu31i, BFu7s_BFu9i_BFu31i)
//============================================================================


struct  BFu7s_BFu9i_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu9i_BFu31ll) C1{ Fs:7 Fi:9 FL:31}



static void Test_BFu7s_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu31ll, BFu7s_BFu9i_BFu31ll)
//============================================================================


struct  BFu7s_BFu9i_BFu32i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu9i_BFu32i) C1{ Fs:7 Fi:9 Fi:32}



static void Test_BFu7s_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu32i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu32i, BFu7s_BFu9i_BFu32i)
//============================================================================


struct  BFu7s_BFu9i_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu9i_BFu32ll) C1{ Fs:7 Fi:9 FL:32}



static void Test_BFu7s_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu32ll, BFu7s_BFu9i_BFu32ll)
//============================================================================


struct  BFu7s_BFu9i_BFu33  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu9i_BFu33) C1{ Fs:7 Fi:9 FL:33}



static void Test_BFu7s_BFu9i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu33");
    static STRUCT_IF_C BFu7s_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu33, BFu7s_BFu9i_BFu33)
//============================================================================


struct  BFu7s_BFu9i_BFu7c  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu9i_BFu7c) C1{ Fs:7 Fi:9 Fc:7}



static void Test_BFu7s_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu7c");
    static STRUCT_IF_C BFu7s_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu7c, BFu7s_BFu9i_BFu7c)
//============================================================================


struct  BFu7s_BFu9i_BFu7i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu9i_BFu7i) C1{ Fs:7 Fi:9 Fi:7}



static void Test_BFu7s_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu7i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu7i, BFu7s_BFu9i_BFu7i)
//============================================================================


struct  BFu7s_BFu9i_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu9i_BFu7ll) C1{ Fs:7 Fi:9 FL:7}



static void Test_BFu7s_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu7ll, BFu7s_BFu9i_BFu7ll)
//============================================================================


struct  BFu7s_BFu9i_BFu7s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu9i_BFu7s) C1{ Fs:7 Fi:9 Fs:7}



static void Test_BFu7s_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu7s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu7s, BFu7s_BFu9i_BFu7s)
//============================================================================


struct  BFu7s_BFu9i_BFu8c  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu9i_BFu8c) C1{ Fs:7 Fi:9 Fc:8}



static void Test_BFu7s_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu8c");
    static STRUCT_IF_C BFu7s_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu8c, BFu7s_BFu9i_BFu8c)
//============================================================================


struct  BFu7s_BFu9i_BFu8i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu9i_BFu8i) C1{ Fs:7 Fi:9 Fi:8}



static void Test_BFu7s_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu8i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu8i, BFu7s_BFu9i_BFu8i)
//============================================================================


struct  BFu7s_BFu9i_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu9i_BFu8ll) C1{ Fs:7 Fi:9 FL:8}



static void Test_BFu7s_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu8ll, BFu7s_BFu9i_BFu8ll)
//============================================================================


struct  BFu7s_BFu9i_BFu8s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu9i_BFu8s) C1{ Fs:7 Fi:9 Fs:8}



static void Test_BFu7s_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu8s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu8s, BFu7s_BFu9i_BFu8s)
//============================================================================


struct  BFu7s_BFu9i_BFu9i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu9i_BFu9i) C1{ Fs:7 Fi:9 Fi:9}



static void Test_BFu7s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu7s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu9i, BFu7s_BFu9i_BFu9i)
//============================================================================


struct  BFu7s_BFu9i_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu9i_BFu9ll) C1{ Fs:7 Fi:9 FL:9}



static void Test_BFu7s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu9ll, BFu7s_BFu9i_BFu9ll)
//============================================================================


struct  BFu7s_BFu9i_BFu9s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu9i_BFu9s) C1{ Fs:7 Fi:9 Fs:9}



static void Test_BFu7s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu7s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_BFu9s, BFu7s_BFu9i_BFu9s)
//============================================================================


struct  BFu7s_BFu9i_C  {
  unsigned short v1:7;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu7s_BFu9i_C) C1{ Fs:7 Fi:9 Fc}



static void Test_BFu7s_BFu9i_C()
{
  {
    init_simple_test("BFu7s_BFu9i_C");
    static STRUCT_IF_C BFu7s_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_C, BFu7s_BFu9i_C)
//============================================================================


struct  BFu7s_BFu9i_D  {
  unsigned short v1:7;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu7s_BFu9i_D) C1{ Fs:7 Fi:9 FL}



static void Test_BFu7s_BFu9i_D()
{
  {
    init_simple_test("BFu7s_BFu9i_D");
    static STRUCT_IF_C BFu7s_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_D, BFu7s_BFu9i_D)
//============================================================================


struct  BFu7s_BFu9i_F  {
  unsigned short v1:7;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu7s_BFu9i_F) C1{ Fs:7 Fi:9 Fi}



static void Test_BFu7s_BFu9i_F()
{
  {
    init_simple_test("BFu7s_BFu9i_F");
    static STRUCT_IF_C BFu7s_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_F, BFu7s_BFu9i_F)
//============================================================================


struct  BFu7s_BFu9i_I  {
  unsigned short v1:7;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu7s_BFu9i_I) C1{ Fs:7 Fi:9 Fi}



static void Test_BFu7s_BFu9i_I()
{
  {
    init_simple_test("BFu7s_BFu9i_I");
    static STRUCT_IF_C BFu7s_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_I, BFu7s_BFu9i_I)
//============================================================================


struct  BFu7s_BFu9i_Ip  {
  unsigned short v1:7;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu7s_BFu9i_Ip) C1{ Fs:7 Fi:9 Fp}



static void Test_BFu7s_BFu9i_Ip()
{
  {
    init_simple_test("BFu7s_BFu9i_Ip");
    static STRUCT_IF_C BFu7s_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Ip, BFu7s_BFu9i_Ip)
//============================================================================


struct  BFu7s_BFu9i_L  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu9i_L) C1{ Fs:7 Fi:9 FL}



static void Test_BFu7s_BFu9i_L()
{
  {
    init_simple_test("BFu7s_BFu9i_L");
    static STRUCT_IF_C BFu7s_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_L, BFu7s_BFu9i_L)
//============================================================================


struct  BFu7s_BFu9i_S  {
  unsigned short v1:7;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu7s_BFu9i_S) C1{ Fs:7 Fi:9 Fs}



static void Test_BFu7s_BFu9i_S()
{
  {
    init_simple_test("BFu7s_BFu9i_S");
    static STRUCT_IF_C BFu7s_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_S, BFu7s_BFu9i_S)
//============================================================================


struct  BFu7s_BFu9i_Uc  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu9i_Uc) C1{ Fs:7 Fi:9 Fc}



static void Test_BFu7s_BFu9i_Uc()
{
  {
    init_simple_test("BFu7s_BFu9i_Uc");
    static STRUCT_IF_C BFu7s_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Uc, BFu7s_BFu9i_Uc)
//============================================================================


struct  BFu7s_BFu9i_Ui  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu9i_Ui) C1{ Fs:7 Fi:9 Fi}



static void Test_BFu7s_BFu9i_Ui()
{
  {
    init_simple_test("BFu7s_BFu9i_Ui");
    static STRUCT_IF_C BFu7s_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Ui, BFu7s_BFu9i_Ui)
//============================================================================


struct  BFu7s_BFu9i_Ul  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu9i_Ul) C1{ Fs:7 Fi:9 FL}



static void Test_BFu7s_BFu9i_Ul()
{
  {
    init_simple_test("BFu7s_BFu9i_Ul");
    static STRUCT_IF_C BFu7s_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Ul, BFu7s_BFu9i_Ul)
//============================================================================


struct  BFu7s_BFu9i_Us  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu9i_Us) C1{ Fs:7 Fi:9 Fs}



static void Test_BFu7s_BFu9i_Us()
{
  {
    init_simple_test("BFu7s_BFu9i_Us");
    static STRUCT_IF_C BFu7s_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Us, BFu7s_BFu9i_Us)
//============================================================================


struct  BFu7s_BFu9i_Vp  {
  unsigned short v1:7;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu7s_BFu9i_Vp) C1{ Fs:7 Fi:9 Fp}



static void Test_BFu7s_BFu9i_Vp()
{
  {
    init_simple_test("BFu7s_BFu9i_Vp");
    static STRUCT_IF_C BFu7s_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9i_Vp, BFu7s_BFu9i_Vp)
//============================================================================


struct  BFu7s_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu7s_BFu9ll) C1{ Fs:7 FL:9}



static void Test_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll, BFu7s_BFu9ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu9ll_BFu15i) C1{ Fs:7 FL:9 Fi:15}



static void Test_BFu7s_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu15i, BFu7s_BFu9ll_BFu15i)
//============================================================================


struct  BFu7s_BFu9ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu9ll_BFu15ll) C1{ Fs:7 FL:9 FL:15}



static void Test_BFu7s_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu15ll, BFu7s_BFu9ll_BFu15ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu9ll_BFu15s) C1{ Fs:7 FL:9 Fs:15}



static void Test_BFu7s_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu15s, BFu7s_BFu9ll_BFu15s)
//============================================================================


struct  BFu7s_BFu9ll_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu9ll_BFu16i) C1{ Fs:7 FL:9 Fi:16}



static void Test_BFu7s_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu16i, BFu7s_BFu9ll_BFu16i)
//============================================================================


struct  BFu7s_BFu9ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu9ll_BFu16ll) C1{ Fs:7 FL:9 FL:16}



static void Test_BFu7s_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu16ll, BFu7s_BFu9ll_BFu16ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu9ll_BFu16s) C1{ Fs:7 FL:9 Fs:16}



static void Test_BFu7s_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu16s, BFu7s_BFu9ll_BFu16s)
//============================================================================


struct  BFu7s_BFu9ll_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu9ll_BFu17i) C1{ Fs:7 FL:9 Fi:17}



static void Test_BFu7s_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu17i, BFu7s_BFu9ll_BFu17i)
//============================================================================


struct  BFu7s_BFu9ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu9ll_BFu17ll) C1{ Fs:7 FL:9 FL:17}



static void Test_BFu7s_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu17ll, BFu7s_BFu9ll_BFu17ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu9ll_BFu1c) C1{ Fs:7 FL:9 Fc:1}



static void Test_BFu7s_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu1c, BFu7s_BFu9ll_BFu1c)
//============================================================================


struct  BFu7s_BFu9ll_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu9ll_BFu1i) C1{ Fs:7 FL:9 Fi:1}



static void Test_BFu7s_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu1i, BFu7s_BFu9ll_BFu1i)
//============================================================================


struct  BFu7s_BFu9ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu9ll_BFu1ll) C1{ Fs:7 FL:9 FL:1}



static void Test_BFu7s_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu1ll, BFu7s_BFu9ll_BFu1ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu9ll_BFu1s) C1{ Fs:7 FL:9 Fs:1}



static void Test_BFu7s_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu1s, BFu7s_BFu9ll_BFu1s)
//============================================================================


struct  BFu7s_BFu9ll_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu9ll_BFu31i) C1{ Fs:7 FL:9 Fi:31}



static void Test_BFu7s_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu31i, BFu7s_BFu9ll_BFu31i)
//============================================================================


struct  BFu7s_BFu9ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu9ll_BFu31ll) C1{ Fs:7 FL:9 FL:31}



static void Test_BFu7s_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu31ll, BFu7s_BFu9ll_BFu31ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu9ll_BFu32i) C1{ Fs:7 FL:9 Fi:32}



static void Test_BFu7s_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu32i, BFu7s_BFu9ll_BFu32i)
//============================================================================


struct  BFu7s_BFu9ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu9ll_BFu32ll) C1{ Fs:7 FL:9 FL:32}



static void Test_BFu7s_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu32ll, BFu7s_BFu9ll_BFu32ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu33  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu9ll_BFu33) C1{ Fs:7 FL:9 FL:33}



static void Test_BFu7s_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu33");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu33, BFu7s_BFu9ll_BFu33)
//============================================================================


struct  BFu7s_BFu9ll_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu9ll_BFu7c) C1{ Fs:7 FL:9 Fc:7}



static void Test_BFu7s_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu7c, BFu7s_BFu9ll_BFu7c)
//============================================================================


struct  BFu7s_BFu9ll_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu9ll_BFu7i) C1{ Fs:7 FL:9 Fi:7}



static void Test_BFu7s_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu7i, BFu7s_BFu9ll_BFu7i)
//============================================================================


struct  BFu7s_BFu9ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu9ll_BFu7ll) C1{ Fs:7 FL:9 FL:7}



static void Test_BFu7s_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu7ll, BFu7s_BFu9ll_BFu7ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu9ll_BFu7s) C1{ Fs:7 FL:9 Fs:7}



static void Test_BFu7s_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu7s, BFu7s_BFu9ll_BFu7s)
//============================================================================


struct  BFu7s_BFu9ll_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu9ll_BFu8c) C1{ Fs:7 FL:9 Fc:8}



static void Test_BFu7s_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu8c, BFu7s_BFu9ll_BFu8c)
//============================================================================


struct  BFu7s_BFu9ll_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu9ll_BFu8i) C1{ Fs:7 FL:9 Fi:8}



static void Test_BFu7s_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu8i, BFu7s_BFu9ll_BFu8i)
//============================================================================


struct  BFu7s_BFu9ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu9ll_BFu8ll) C1{ Fs:7 FL:9 FL:8}



static void Test_BFu7s_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu8ll, BFu7s_BFu9ll_BFu8ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu9ll_BFu8s) C1{ Fs:7 FL:9 Fs:8}



static void Test_BFu7s_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu8s, BFu7s_BFu9ll_BFu8s)
//============================================================================


struct  BFu7s_BFu9ll_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu9ll_BFu9i) C1{ Fs:7 FL:9 Fi:9}



static void Test_BFu7s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu9i, BFu7s_BFu9ll_BFu9i)
//============================================================================


struct  BFu7s_BFu9ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu9ll_BFu9ll) C1{ Fs:7 FL:9 FL:9}



static void Test_BFu7s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu9ll, BFu7s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu7s_BFu9ll_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu9ll_BFu9s) C1{ Fs:7 FL:9 Fs:9}



static void Test_BFu7s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu7s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_BFu9s, BFu7s_BFu9ll_BFu9s)
//============================================================================


struct  BFu7s_BFu9ll_C  {
  unsigned short v1:7;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu7s_BFu9ll_C) C1{ Fs:7 FL:9 Fc}



static void Test_BFu7s_BFu9ll_C()
{
  {
    init_simple_test("BFu7s_BFu9ll_C");
    static STRUCT_IF_C BFu7s_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_C, BFu7s_BFu9ll_C)
//============================================================================


struct  BFu7s_BFu9ll_D  {
  unsigned short v1:7;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu7s_BFu9ll_D) C1{ Fs:7 FL:9 FL}



static void Test_BFu7s_BFu9ll_D()
{
  {
    init_simple_test("BFu7s_BFu9ll_D");
    static STRUCT_IF_C BFu7s_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_D, BFu7s_BFu9ll_D)
//============================================================================


struct  BFu7s_BFu9ll_F  {
  unsigned short v1:7;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu7s_BFu9ll_F) C1{ Fs:7 FL:9 Fi}



static void Test_BFu7s_BFu9ll_F()
{
  {
    init_simple_test("BFu7s_BFu9ll_F");
    static STRUCT_IF_C BFu7s_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_F, BFu7s_BFu9ll_F)
//============================================================================


struct  BFu7s_BFu9ll_I  {
  unsigned short v1:7;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu7s_BFu9ll_I) C1{ Fs:7 FL:9 Fi}



static void Test_BFu7s_BFu9ll_I()
{
  {
    init_simple_test("BFu7s_BFu9ll_I");
    static STRUCT_IF_C BFu7s_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_I, BFu7s_BFu9ll_I)
//============================================================================


struct  BFu7s_BFu9ll_Ip  {
  unsigned short v1:7;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu7s_BFu9ll_Ip) C1{ Fs:7 FL:9 Fp}



static void Test_BFu7s_BFu9ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu9ll_Ip");
    static STRUCT_IF_C BFu7s_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Ip, BFu7s_BFu9ll_Ip)
//============================================================================


struct  BFu7s_BFu9ll_L  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu9ll_L) C1{ Fs:7 FL:9 FL}



static void Test_BFu7s_BFu9ll_L()
{
  {
    init_simple_test("BFu7s_BFu9ll_L");
    static STRUCT_IF_C BFu7s_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_L, BFu7s_BFu9ll_L)
//============================================================================


struct  BFu7s_BFu9ll_S  {
  unsigned short v1:7;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu7s_BFu9ll_S) C1{ Fs:7 FL:9 Fs}



static void Test_BFu7s_BFu9ll_S()
{
  {
    init_simple_test("BFu7s_BFu9ll_S");
    static STRUCT_IF_C BFu7s_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_S, BFu7s_BFu9ll_S)
//============================================================================


struct  BFu7s_BFu9ll_Uc  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu9ll_Uc) C1{ Fs:7 FL:9 Fc}



static void Test_BFu7s_BFu9ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu9ll_Uc");
    static STRUCT_IF_C BFu7s_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Uc, BFu7s_BFu9ll_Uc)
//============================================================================


struct  BFu7s_BFu9ll_Ui  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu9ll_Ui) C1{ Fs:7 FL:9 Fi}



static void Test_BFu7s_BFu9ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu9ll_Ui");
    static STRUCT_IF_C BFu7s_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Ui, BFu7s_BFu9ll_Ui)
//============================================================================


struct  BFu7s_BFu9ll_Ul  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu9ll_Ul) C1{ Fs:7 FL:9 FL}



static void Test_BFu7s_BFu9ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu9ll_Ul");
    static STRUCT_IF_C BFu7s_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Ul, BFu7s_BFu9ll_Ul)
//============================================================================


struct  BFu7s_BFu9ll_Us  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu9ll_Us) C1{ Fs:7 FL:9 Fs}



static void Test_BFu7s_BFu9ll_Us()
{
  {
    init_simple_test("BFu7s_BFu9ll_Us");
    static STRUCT_IF_C BFu7s_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Us, BFu7s_BFu9ll_Us)
//============================================================================


struct  BFu7s_BFu9ll_Vp  {
  unsigned short v1:7;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu7s_BFu9ll_Vp) C1{ Fs:7 FL:9 Fp}



static void Test_BFu7s_BFu9ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu9ll_Vp");
    static STRUCT_IF_C BFu7s_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9ll_Vp, BFu7s_BFu9ll_Vp)
//============================================================================


struct  BFu7s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu7s_BFu9s) C1{ Fs:7 Fs:9}



static void Test_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s, BFu7s_BFu9s)
//============================================================================


struct  BFu7s_BFu9s_BFu15i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7s_BFu9s_BFu15i) C1{ Fs:7 Fs:9 Fi:15}



static void Test_BFu7s_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu15i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu15i, BFu7s_BFu9s_BFu15i)
//============================================================================


struct  BFu7s_BFu9s_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_BFu9s_BFu15ll) C1{ Fs:7 Fs:9 FL:15}



static void Test_BFu7s_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu15ll, BFu7s_BFu9s_BFu15ll)
//============================================================================


struct  BFu7s_BFu9s_BFu15s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7s_BFu9s_BFu15s) C1{ Fs:7 Fs:9 Fs:15}



static void Test_BFu7s_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu15s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu15s, BFu7s_BFu9s_BFu15s)
//============================================================================


struct  BFu7s_BFu9s_BFu16i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7s_BFu9s_BFu16i) C1{ Fs:7 Fs:9 Fi:16}



static void Test_BFu7s_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu16i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu16i, BFu7s_BFu9s_BFu16i)
//============================================================================


struct  BFu7s_BFu9s_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_BFu9s_BFu16ll) C1{ Fs:7 Fs:9 FL:16}



static void Test_BFu7s_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu16ll, BFu7s_BFu9s_BFu16ll)
//============================================================================


struct  BFu7s_BFu9s_BFu16s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7s_BFu9s_BFu16s) C1{ Fs:7 Fs:9 Fs:16}



static void Test_BFu7s_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu16s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu16s, BFu7s_BFu9s_BFu16s)
//============================================================================


struct  BFu7s_BFu9s_BFu17i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7s_BFu9s_BFu17i) C1{ Fs:7 Fs:9 Fi:17}



static void Test_BFu7s_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu17i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu17i, BFu7s_BFu9s_BFu17i)
//============================================================================


struct  BFu7s_BFu9s_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_BFu9s_BFu17ll) C1{ Fs:7 Fs:9 FL:17}



static void Test_BFu7s_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu17ll, BFu7s_BFu9s_BFu17ll)
//============================================================================


struct  BFu7s_BFu9s_BFu1c  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7s_BFu9s_BFu1c) C1{ Fs:7 Fs:9 Fc:1}



static void Test_BFu7s_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu1c");
    static STRUCT_IF_C BFu7s_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu1c, BFu7s_BFu9s_BFu1c)
//============================================================================


struct  BFu7s_BFu9s_BFu1i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7s_BFu9s_BFu1i) C1{ Fs:7 Fs:9 Fi:1}



static void Test_BFu7s_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu1i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu1i, BFu7s_BFu9s_BFu1i)
//============================================================================


struct  BFu7s_BFu9s_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_BFu9s_BFu1ll) C1{ Fs:7 Fs:9 FL:1}



static void Test_BFu7s_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu1ll, BFu7s_BFu9s_BFu1ll)
//============================================================================


struct  BFu7s_BFu9s_BFu1s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7s_BFu9s_BFu1s) C1{ Fs:7 Fs:9 Fs:1}



static void Test_BFu7s_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu1s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu1s, BFu7s_BFu9s_BFu1s)
//============================================================================


struct  BFu7s_BFu9s_BFu31i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7s_BFu9s_BFu31i) C1{ Fs:7 Fs:9 Fi:31}



static void Test_BFu7s_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu31i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu31i, BFu7s_BFu9s_BFu31i)
//============================================================================


struct  BFu7s_BFu9s_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_BFu9s_BFu31ll) C1{ Fs:7 Fs:9 FL:31}



static void Test_BFu7s_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu31ll, BFu7s_BFu9s_BFu31ll)
//============================================================================


struct  BFu7s_BFu9s_BFu32i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7s_BFu9s_BFu32i) C1{ Fs:7 Fs:9 Fi:32}



static void Test_BFu7s_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu32i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu32i, BFu7s_BFu9s_BFu32i)
//============================================================================


struct  BFu7s_BFu9s_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_BFu9s_BFu32ll) C1{ Fs:7 Fs:9 FL:32}



static void Test_BFu7s_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu32ll, BFu7s_BFu9s_BFu32ll)
//============================================================================


struct  BFu7s_BFu9s_BFu33  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_BFu9s_BFu33) C1{ Fs:7 Fs:9 FL:33}



static void Test_BFu7s_BFu9s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu33");
    static STRUCT_IF_C BFu7s_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu33, BFu7s_BFu9s_BFu33)
//============================================================================


struct  BFu7s_BFu9s_BFu7c  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7s_BFu9s_BFu7c) C1{ Fs:7 Fs:9 Fc:7}



static void Test_BFu7s_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu7c");
    static STRUCT_IF_C BFu7s_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu7c, BFu7s_BFu9s_BFu7c)
//============================================================================


struct  BFu7s_BFu9s_BFu7i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7s_BFu9s_BFu7i) C1{ Fs:7 Fs:9 Fi:7}



static void Test_BFu7s_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu7i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu7i, BFu7s_BFu9s_BFu7i)
//============================================================================


struct  BFu7s_BFu9s_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_BFu9s_BFu7ll) C1{ Fs:7 Fs:9 FL:7}



static void Test_BFu7s_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu7ll, BFu7s_BFu9s_BFu7ll)
//============================================================================


struct  BFu7s_BFu9s_BFu7s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7s_BFu9s_BFu7s) C1{ Fs:7 Fs:9 Fs:7}



static void Test_BFu7s_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu7s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu7s, BFu7s_BFu9s_BFu7s)
//============================================================================


struct  BFu7s_BFu9s_BFu8c  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7s_BFu9s_BFu8c) C1{ Fs:7 Fs:9 Fc:8}



static void Test_BFu7s_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu8c");
    static STRUCT_IF_C BFu7s_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu8c, BFu7s_BFu9s_BFu8c)
//============================================================================


struct  BFu7s_BFu9s_BFu8i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7s_BFu9s_BFu8i) C1{ Fs:7 Fs:9 Fi:8}



static void Test_BFu7s_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu8i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu8i, BFu7s_BFu9s_BFu8i)
//============================================================================


struct  BFu7s_BFu9s_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_BFu9s_BFu8ll) C1{ Fs:7 Fs:9 FL:8}



static void Test_BFu7s_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu8ll, BFu7s_BFu9s_BFu8ll)
//============================================================================


struct  BFu7s_BFu9s_BFu8s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7s_BFu9s_BFu8s) C1{ Fs:7 Fs:9 Fs:8}



static void Test_BFu7s_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu8s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu8s, BFu7s_BFu9s_BFu8s)
//============================================================================


struct  BFu7s_BFu9s_BFu9i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7s_BFu9s_BFu9i) C1{ Fs:7 Fs:9 Fi:9}



static void Test_BFu7s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu7s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu9i, BFu7s_BFu9s_BFu9i)
//============================================================================


struct  BFu7s_BFu9s_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_BFu9s_BFu9ll) C1{ Fs:7 Fs:9 FL:9}



static void Test_BFu7s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu7s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu9ll, BFu7s_BFu9s_BFu9ll)
//============================================================================


struct  BFu7s_BFu9s_BFu9s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7s_BFu9s_BFu9s) C1{ Fs:7 Fs:9 Fs:9}



static void Test_BFu7s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu7s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_BFu9s, BFu7s_BFu9s_BFu9s)
//============================================================================


struct  BFu7s_BFu9s_C  {
  unsigned short v1:7;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu7s_BFu9s_C) C1{ Fs:7 Fs:9 Fc}



static void Test_BFu7s_BFu9s_C()
{
  {
    init_simple_test("BFu7s_BFu9s_C");
    static STRUCT_IF_C BFu7s_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_C");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_C, BFu7s_BFu9s_C)
//============================================================================


struct  BFu7s_BFu9s_D  {
  unsigned short v1:7;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu7s_BFu9s_D) C1{ Fs:7 Fs:9 FL}



static void Test_BFu7s_BFu9s_D()
{
  {
    init_simple_test("BFu7s_BFu9s_D");
    static STRUCT_IF_C BFu7s_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_D, BFu7s_BFu9s_D)
//============================================================================


struct  BFu7s_BFu9s_F  {
  unsigned short v1:7;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu7s_BFu9s_F) C1{ Fs:7 Fs:9 Fi}



static void Test_BFu7s_BFu9s_F()
{
  {
    init_simple_test("BFu7s_BFu9s_F");
    static STRUCT_IF_C BFu7s_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_F, BFu7s_BFu9s_F)
//============================================================================


struct  BFu7s_BFu9s_I  {
  unsigned short v1:7;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu7s_BFu9s_I) C1{ Fs:7 Fs:9 Fi}



static void Test_BFu7s_BFu9s_I()
{
  {
    init_simple_test("BFu7s_BFu9s_I");
    static STRUCT_IF_C BFu7s_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_I, BFu7s_BFu9s_I)
//============================================================================


struct  BFu7s_BFu9s_Ip  {
  unsigned short v1:7;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu7s_BFu9s_Ip) C1{ Fs:7 Fs:9 Fp}



static void Test_BFu7s_BFu9s_Ip()
{
  {
    init_simple_test("BFu7s_BFu9s_Ip");
    static STRUCT_IF_C BFu7s_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Ip, BFu7s_BFu9s_Ip)
//============================================================================


struct  BFu7s_BFu9s_L  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7s_BFu9s_L) C1{ Fs:7 Fs:9 FL}



static void Test_BFu7s_BFu9s_L()
{
  {
    init_simple_test("BFu7s_BFu9s_L");
    static STRUCT_IF_C BFu7s_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_L, BFu7s_BFu9s_L)
//============================================================================


struct  BFu7s_BFu9s_S  {
  unsigned short v1:7;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu7s_BFu9s_S) C1{ Fs:7 Fs:9 Fs}



static void Test_BFu7s_BFu9s_S()
{
  {
    init_simple_test("BFu7s_BFu9s_S");
    static STRUCT_IF_C BFu7s_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_S");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_S, BFu7s_BFu9s_S)
//============================================================================


struct  BFu7s_BFu9s_Uc  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu7s_BFu9s_Uc) C1{ Fs:7 Fs:9 Fc}



static void Test_BFu7s_BFu9s_Uc()
{
  {
    init_simple_test("BFu7s_BFu9s_Uc");
    static STRUCT_IF_C BFu7s_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Uc");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Uc, BFu7s_BFu9s_Uc)
//============================================================================


struct  BFu7s_BFu9s_Ui  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu7s_BFu9s_Ui) C1{ Fs:7 Fs:9 Fi}



static void Test_BFu7s_BFu9s_Ui()
{
  {
    init_simple_test("BFu7s_BFu9s_Ui");
    static STRUCT_IF_C BFu7s_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu7s_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Ui, BFu7s_BFu9s_Ui)
//============================================================================


struct  BFu7s_BFu9s_Ul  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7s_BFu9s_Ul) C1{ Fs:7 Fs:9 FL}



static void Test_BFu7s_BFu9s_Ul()
{
  {
    init_simple_test("BFu7s_BFu9s_Ul");
    static STRUCT_IF_C BFu7s_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Ul, BFu7s_BFu9s_Ul)
//============================================================================


struct  BFu7s_BFu9s_Us  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu7s_BFu9s_Us) C1{ Fs:7 Fs:9 Fs}



static void Test_BFu7s_BFu9s_Us()
{
  {
    init_simple_test("BFu7s_BFu9s_Us");
    static STRUCT_IF_C BFu7s_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Us");
    check_field_offset(lv, v3, 2, "BFu7s_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Us, BFu7s_BFu9s_Us)
//============================================================================


struct  BFu7s_BFu9s_Vp  {
  unsigned short v1:7;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu7s_BFu9s_Vp) C1{ Fs:7 Fs:9 Fp}



static void Test_BFu7s_BFu9s_Vp()
{
  {
    init_simple_test("BFu7s_BFu9s_Vp");
    static STRUCT_IF_C BFu7s_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_BFu9s_Vp, BFu7s_BFu9s_Vp)
//============================================================================


struct  BFu7s_C  {
  unsigned short v1:7;
  char v2;
};
//SIG(1 BFu7s_C) C1{ Fs:7 Fc}



static void Test_BFu7s_C()
{
  {
    init_simple_test("BFu7s_C");
    static STRUCT_IF_C BFu7s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C");
    check_field_offset(lv, v2, 1, "BFu7s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C, BFu7s_C)
//============================================================================


struct  BFu7s_C_BFu15i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_C_BFu15i) C1{ Fs:7 Fc Fi:15}



static void Test_BFu7s_C_BFu15i()
{
  {
    init_simple_test("BFu7s_C_BFu15i");
    static STRUCT_IF_C BFu7s_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu15i, BFu7s_C_BFu15i)
//============================================================================


struct  BFu7s_C_BFu15ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_C_BFu15ll) C1{ Fs:7 Fc FL:15}



static void Test_BFu7s_C_BFu15ll()
{
  {
    init_simple_test("BFu7s_C_BFu15ll");
    static STRUCT_IF_C BFu7s_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu15ll, BFu7s_C_BFu15ll)
//============================================================================


struct  BFu7s_C_BFu15s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_C_BFu15s) C1{ Fs:7 Fc Fs:15}



static void Test_BFu7s_C_BFu15s()
{
  {
    init_simple_test("BFu7s_C_BFu15s");
    static STRUCT_IF_C BFu7s_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu15s, BFu7s_C_BFu15s)
//============================================================================


struct  BFu7s_C_BFu16i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_C_BFu16i) C1{ Fs:7 Fc Fi:16}



static void Test_BFu7s_C_BFu16i()
{
  {
    init_simple_test("BFu7s_C_BFu16i");
    static STRUCT_IF_C BFu7s_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu16i, BFu7s_C_BFu16i)
//============================================================================


struct  BFu7s_C_BFu16ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_C_BFu16ll) C1{ Fs:7 Fc FL:16}



static void Test_BFu7s_C_BFu16ll()
{
  {
    init_simple_test("BFu7s_C_BFu16ll");
    static STRUCT_IF_C BFu7s_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu16ll, BFu7s_C_BFu16ll)
//============================================================================


struct  BFu7s_C_BFu16s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_C_BFu16s) C1{ Fs:7 Fc Fs:16}



static void Test_BFu7s_C_BFu16s()
{
  {
    init_simple_test("BFu7s_C_BFu16s");
    static STRUCT_IF_C BFu7s_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu16s, BFu7s_C_BFu16s)
//============================================================================


struct  BFu7s_C_BFu17i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_C_BFu17i) C1{ Fs:7 Fc Fi:17}



static void Test_BFu7s_C_BFu17i()
{
  {
    init_simple_test("BFu7s_C_BFu17i");
    static STRUCT_IF_C BFu7s_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu17i, BFu7s_C_BFu17i)
//============================================================================


struct  BFu7s_C_BFu17ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_C_BFu17ll) C1{ Fs:7 Fc FL:17}



static void Test_BFu7s_C_BFu17ll()
{
  {
    init_simple_test("BFu7s_C_BFu17ll");
    static STRUCT_IF_C BFu7s_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu17ll, BFu7s_C_BFu17ll)
//============================================================================


struct  BFu7s_C_BFu1c  {
  unsigned short v1:7;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_C_BFu1c) C1{ Fs:7 Fc Fc:1}



static void Test_BFu7s_C_BFu1c()
{
  {
    init_simple_test("BFu7s_C_BFu1c");
    static STRUCT_IF_C BFu7s_C_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu1c, BFu7s_C_BFu1c)
//============================================================================


struct  BFu7s_C_BFu1i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_C_BFu1i) C1{ Fs:7 Fc Fi:1}



static void Test_BFu7s_C_BFu1i()
{
  {
    init_simple_test("BFu7s_C_BFu1i");
    static STRUCT_IF_C BFu7s_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu1i, BFu7s_C_BFu1i)
//============================================================================


struct  BFu7s_C_BFu1ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_C_BFu1ll) C1{ Fs:7 Fc FL:1}



static void Test_BFu7s_C_BFu1ll()
{
  {
    init_simple_test("BFu7s_C_BFu1ll");
    static STRUCT_IF_C BFu7s_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu1ll, BFu7s_C_BFu1ll)
//============================================================================


struct  BFu7s_C_BFu1s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_C_BFu1s) C1{ Fs:7 Fc Fs:1}



static void Test_BFu7s_C_BFu1s()
{
  {
    init_simple_test("BFu7s_C_BFu1s");
    static STRUCT_IF_C BFu7s_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu1s, BFu7s_C_BFu1s)
//============================================================================


struct  BFu7s_C_BFu31i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_C_BFu31i) C1{ Fs:7 Fc Fi:31}



static void Test_BFu7s_C_BFu31i()
{
  {
    init_simple_test("BFu7s_C_BFu31i");
    static STRUCT_IF_C BFu7s_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu31i, BFu7s_C_BFu31i)
//============================================================================


struct  BFu7s_C_BFu31ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_C_BFu31ll) C1{ Fs:7 Fc FL:31}



static void Test_BFu7s_C_BFu31ll()
{
  {
    init_simple_test("BFu7s_C_BFu31ll");
    static STRUCT_IF_C BFu7s_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu31ll, BFu7s_C_BFu31ll)
//============================================================================


struct  BFu7s_C_BFu32i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_C_BFu32i) C1{ Fs:7 Fc Fi:32}



static void Test_BFu7s_C_BFu32i()
{
  {
    init_simple_test("BFu7s_C_BFu32i");
    static STRUCT_IF_C BFu7s_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu32i, BFu7s_C_BFu32i)
//============================================================================


struct  BFu7s_C_BFu32ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_C_BFu32ll) C1{ Fs:7 Fc FL:32}



static void Test_BFu7s_C_BFu32ll()
{
  {
    init_simple_test("BFu7s_C_BFu32ll");
    static STRUCT_IF_C BFu7s_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu32ll, BFu7s_C_BFu32ll)
//============================================================================


struct  BFu7s_C_BFu33  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_C_BFu33) C1{ Fs:7 Fc FL:33}



static void Test_BFu7s_C_BFu33()
{
  {
    init_simple_test("BFu7s_C_BFu33");
    static STRUCT_IF_C BFu7s_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu33");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu33, BFu7s_C_BFu33)
//============================================================================


struct  BFu7s_C_BFu7c  {
  unsigned short v1:7;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_C_BFu7c) C1{ Fs:7 Fc Fc:7}



static void Test_BFu7s_C_BFu7c()
{
  {
    init_simple_test("BFu7s_C_BFu7c");
    static STRUCT_IF_C BFu7s_C_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu7c, BFu7s_C_BFu7c)
//============================================================================


struct  BFu7s_C_BFu7i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_C_BFu7i) C1{ Fs:7 Fc Fi:7}



static void Test_BFu7s_C_BFu7i()
{
  {
    init_simple_test("BFu7s_C_BFu7i");
    static STRUCT_IF_C BFu7s_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu7i, BFu7s_C_BFu7i)
//============================================================================


struct  BFu7s_C_BFu7ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_C_BFu7ll) C1{ Fs:7 Fc FL:7}



static void Test_BFu7s_C_BFu7ll()
{
  {
    init_simple_test("BFu7s_C_BFu7ll");
    static STRUCT_IF_C BFu7s_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu7ll, BFu7s_C_BFu7ll)
//============================================================================


struct  BFu7s_C_BFu7s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_C_BFu7s) C1{ Fs:7 Fc Fs:7}



static void Test_BFu7s_C_BFu7s()
{
  {
    init_simple_test("BFu7s_C_BFu7s");
    static STRUCT_IF_C BFu7s_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu7s, BFu7s_C_BFu7s)
//============================================================================


struct  BFu7s_C_BFu8c  {
  unsigned short v1:7;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_C_BFu8c) C1{ Fs:7 Fc Fc:8}



static void Test_BFu7s_C_BFu8c()
{
  {
    init_simple_test("BFu7s_C_BFu8c");
    static STRUCT_IF_C BFu7s_C_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu8c, BFu7s_C_BFu8c)
//============================================================================


struct  BFu7s_C_BFu8i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_C_BFu8i) C1{ Fs:7 Fc Fi:8}



static void Test_BFu7s_C_BFu8i()
{
  {
    init_simple_test("BFu7s_C_BFu8i");
    static STRUCT_IF_C BFu7s_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu8i, BFu7s_C_BFu8i)
//============================================================================


struct  BFu7s_C_BFu8ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_C_BFu8ll) C1{ Fs:7 Fc FL:8}



static void Test_BFu7s_C_BFu8ll()
{
  {
    init_simple_test("BFu7s_C_BFu8ll");
    static STRUCT_IF_C BFu7s_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu8ll, BFu7s_C_BFu8ll)
//============================================================================


struct  BFu7s_C_BFu8s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_C_BFu8s) C1{ Fs:7 Fc Fs:8}



static void Test_BFu7s_C_BFu8s()
{
  {
    init_simple_test("BFu7s_C_BFu8s");
    static STRUCT_IF_C BFu7s_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu8s, BFu7s_C_BFu8s)
//============================================================================


struct  BFu7s_C_BFu9i  {
  unsigned short v1:7;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_C_BFu9i) C1{ Fs:7 Fc Fi:9}



static void Test_BFu7s_C_BFu9i()
{
  {
    init_simple_test("BFu7s_C_BFu9i");
    static STRUCT_IF_C BFu7s_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu9i, BFu7s_C_BFu9i)
//============================================================================


struct  BFu7s_C_BFu9ll  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_C_BFu9ll) C1{ Fs:7 Fc FL:9}



static void Test_BFu7s_C_BFu9ll()
{
  {
    init_simple_test("BFu7s_C_BFu9ll");
    static STRUCT_IF_C BFu7s_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu9ll, BFu7s_C_BFu9ll)
//============================================================================


struct  BFu7s_C_BFu9s  {
  unsigned short v1:7;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_C_BFu9s) C1{ Fs:7 Fc Fs:9}



static void Test_BFu7s_C_BFu9s()
{
  {
    init_simple_test("BFu7s_C_BFu9s");
    static STRUCT_IF_C BFu7s_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_BFu9s, BFu7s_C_BFu9s)
//============================================================================


struct  BFu7s_C_C  {
  unsigned short v1:7;
  char v2;
  char v3;
};
//SIG(1 BFu7s_C_C) C1{ Fs:7 Fc[2]}



static void Test_BFu7s_C_C()
{
  {
    init_simple_test("BFu7s_C_C");
    static STRUCT_IF_C BFu7s_C_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_C");
    check_field_offset(lv, v2, 1, "BFu7s_C_C.v2");
    check_field_offset(lv, v3, 2, "BFu7s_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_C, BFu7s_C_C)
//============================================================================


struct  BFu7s_C_D  {
  unsigned short v1:7;
  char v2;
  double v3;
};
//SIG(1 BFu7s_C_D) C1{ Fs:7 Fc FL}



static void Test_BFu7s_C_D()
{
  {
    init_simple_test("BFu7s_C_D");
    static STRUCT_IF_C BFu7s_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_D");
    check_field_offset(lv, v2, 1, "BFu7s_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_D, BFu7s_C_D)
//============================================================================


struct  BFu7s_C_F  {
  unsigned short v1:7;
  char v2;
  float v3;
};
//SIG(1 BFu7s_C_F) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_C_F()
{
  {
    init_simple_test("BFu7s_C_F");
    static STRUCT_IF_C BFu7s_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_F");
    check_field_offset(lv, v2, 1, "BFu7s_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu7s_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_F, BFu7s_C_F)
//============================================================================


struct  BFu7s_C_I  {
  unsigned short v1:7;
  char v2;
  int v3;
};
//SIG(1 BFu7s_C_I) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_C_I()
{
  {
    init_simple_test("BFu7s_C_I");
    static STRUCT_IF_C BFu7s_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_I");
    check_field_offset(lv, v2, 1, "BFu7s_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu7s_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_I, BFu7s_C_I)
//============================================================================


struct  BFu7s_C_Ip  {
  unsigned short v1:7;
  char v2;
  int *v3;
};
//SIG(1 BFu7s_C_Ip) C1{ Fs:7 Fc Fp}



static void Test_BFu7s_C_Ip()
{
  {
    init_simple_test("BFu7s_C_Ip");
    static STRUCT_IF_C BFu7s_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Ip");
    check_field_offset(lv, v2, 1, "BFu7s_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Ip, BFu7s_C_Ip)
//============================================================================


struct  BFu7s_C_L  {
  unsigned short v1:7;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_C_L) C1{ Fs:7 Fc FL}



static void Test_BFu7s_C_L()
{
  {
    init_simple_test("BFu7s_C_L");
    static STRUCT_IF_C BFu7s_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_L");
    check_field_offset(lv, v2, 1, "BFu7s_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_L, BFu7s_C_L)
//============================================================================


struct  BFu7s_C_S  {
  unsigned short v1:7;
  char v2;
  short v3;
};
//SIG(1 BFu7s_C_S) C1{ Fs:7 Fc Fs}



static void Test_BFu7s_C_S()
{
  {
    init_simple_test("BFu7s_C_S");
    static STRUCT_IF_C BFu7s_C_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_S");
    check_field_offset(lv, v2, 1, "BFu7s_C_S.v2");
    check_field_offset(lv, v3, 2, "BFu7s_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_S, BFu7s_C_S)
//============================================================================


struct  BFu7s_C_Uc  {
  unsigned short v1:7;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu7s_C_Uc) C1{ Fs:7 Fc[2]}



static void Test_BFu7s_C_Uc()
{
  {
    init_simple_test("BFu7s_C_Uc");
    static STRUCT_IF_C BFu7s_C_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Uc");
    check_field_offset(lv, v2, 1, "BFu7s_C_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7s_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Uc, BFu7s_C_Uc)
//============================================================================


struct  BFu7s_C_Ui  {
  unsigned short v1:7;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu7s_C_Ui) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_C_Ui()
{
  {
    init_simple_test("BFu7s_C_Ui");
    static STRUCT_IF_C BFu7s_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Ui");
    check_field_offset(lv, v2, 1, "BFu7s_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7s_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Ui, BFu7s_C_Ui)
//============================================================================


struct  BFu7s_C_Ul  {
  unsigned short v1:7;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_C_Ul) C1{ Fs:7 Fc FL}



static void Test_BFu7s_C_Ul()
{
  {
    init_simple_test("BFu7s_C_Ul");
    static STRUCT_IF_C BFu7s_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Ul");
    check_field_offset(lv, v2, 1, "BFu7s_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Ul, BFu7s_C_Ul)
//============================================================================


struct  BFu7s_C_Us  {
  unsigned short v1:7;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu7s_C_Us) C1{ Fs:7 Fc Fs}



static void Test_BFu7s_C_Us()
{
  {
    init_simple_test("BFu7s_C_Us");
    static STRUCT_IF_C BFu7s_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Us");
    check_field_offset(lv, v2, 1, "BFu7s_C_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7s_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Us, BFu7s_C_Us)
//============================================================================


struct  BFu7s_C_Vp  {
  unsigned short v1:7;
  char v2;
  void *v3;
};
//SIG(1 BFu7s_C_Vp) C1{ Fs:7 Fc Fp}



static void Test_BFu7s_C_Vp()
{
  {
    init_simple_test("BFu7s_C_Vp");
    static STRUCT_IF_C BFu7s_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_Vp");
    check_field_offset(lv, v2, 1, "BFu7s_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_C_Vp, BFu7s_C_Vp)
//============================================================================


struct  BFu7s_D  {
  unsigned short v1:7;
  double v2;
};
//SIG(1 BFu7s_D) C1{ Fs:7 FL}



static void Test_BFu7s_D()
{
  {
    init_simple_test("BFu7s_D");
    static STRUCT_IF_C BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D, BFu7s_D)
//============================================================================


struct  BFu7s_D_BFu15i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_D_BFu15i) C1{ Fs:7 FL Fi:15}



static void Test_BFu7s_D_BFu15i()
{
  {
    init_simple_test("BFu7s_D_BFu15i");
    static STRUCT_IF_C BFu7s_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu15i, BFu7s_D_BFu15i)
//============================================================================


struct  BFu7s_D_BFu15ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_D_BFu15ll) C1{ Fs:7 FL FL:15}



static void Test_BFu7s_D_BFu15ll()
{
  {
    init_simple_test("BFu7s_D_BFu15ll");
    static STRUCT_IF_C BFu7s_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu15ll, BFu7s_D_BFu15ll)
//============================================================================


struct  BFu7s_D_BFu15s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_D_BFu15s) C1{ Fs:7 FL Fs:15}



static void Test_BFu7s_D_BFu15s()
{
  {
    init_simple_test("BFu7s_D_BFu15s");
    static STRUCT_IF_C BFu7s_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu15s, BFu7s_D_BFu15s)
//============================================================================


struct  BFu7s_D_BFu16i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_D_BFu16i) C1{ Fs:7 FL Fi:16}



static void Test_BFu7s_D_BFu16i()
{
  {
    init_simple_test("BFu7s_D_BFu16i");
    static STRUCT_IF_C BFu7s_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu16i, BFu7s_D_BFu16i)
//============================================================================


struct  BFu7s_D_BFu16ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_D_BFu16ll) C1{ Fs:7 FL FL:16}



static void Test_BFu7s_D_BFu16ll()
{
  {
    init_simple_test("BFu7s_D_BFu16ll");
    static STRUCT_IF_C BFu7s_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu16ll, BFu7s_D_BFu16ll)
//============================================================================


struct  BFu7s_D_BFu16s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_D_BFu16s) C1{ Fs:7 FL Fs:16}



static void Test_BFu7s_D_BFu16s()
{
  {
    init_simple_test("BFu7s_D_BFu16s");
    static STRUCT_IF_C BFu7s_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu16s, BFu7s_D_BFu16s)
//============================================================================


struct  BFu7s_D_BFu17i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_D_BFu17i) C1{ Fs:7 FL Fi:17}



static void Test_BFu7s_D_BFu17i()
{
  {
    init_simple_test("BFu7s_D_BFu17i");
    static STRUCT_IF_C BFu7s_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu17i, BFu7s_D_BFu17i)
//============================================================================


struct  BFu7s_D_BFu17ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_D_BFu17ll) C1{ Fs:7 FL FL:17}



static void Test_BFu7s_D_BFu17ll()
{
  {
    init_simple_test("BFu7s_D_BFu17ll");
    static STRUCT_IF_C BFu7s_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu17ll, BFu7s_D_BFu17ll)
//============================================================================


struct  BFu7s_D_BFu1c  {
  unsigned short v1:7;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_D_BFu1c) C1{ Fs:7 FL Fc:1}



static void Test_BFu7s_D_BFu1c()
{
  {
    init_simple_test("BFu7s_D_BFu1c");
    static STRUCT_IF_C BFu7s_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu1c, BFu7s_D_BFu1c)
//============================================================================


struct  BFu7s_D_BFu1i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_D_BFu1i) C1{ Fs:7 FL Fi:1}



static void Test_BFu7s_D_BFu1i()
{
  {
    init_simple_test("BFu7s_D_BFu1i");
    static STRUCT_IF_C BFu7s_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu1i, BFu7s_D_BFu1i)
//============================================================================


struct  BFu7s_D_BFu1ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_D_BFu1ll) C1{ Fs:7 FL FL:1}



static void Test_BFu7s_D_BFu1ll()
{
  {
    init_simple_test("BFu7s_D_BFu1ll");
    static STRUCT_IF_C BFu7s_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu1ll, BFu7s_D_BFu1ll)
//============================================================================


struct  BFu7s_D_BFu1s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_D_BFu1s) C1{ Fs:7 FL Fs:1}



static void Test_BFu7s_D_BFu1s()
{
  {
    init_simple_test("BFu7s_D_BFu1s");
    static STRUCT_IF_C BFu7s_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu1s, BFu7s_D_BFu1s)
//============================================================================


struct  BFu7s_D_BFu31i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_D_BFu31i) C1{ Fs:7 FL Fi:31}



static void Test_BFu7s_D_BFu31i()
{
  {
    init_simple_test("BFu7s_D_BFu31i");
    static STRUCT_IF_C BFu7s_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu31i, BFu7s_D_BFu31i)
//============================================================================


struct  BFu7s_D_BFu31ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_D_BFu31ll) C1{ Fs:7 FL FL:31}



static void Test_BFu7s_D_BFu31ll()
{
  {
    init_simple_test("BFu7s_D_BFu31ll");
    static STRUCT_IF_C BFu7s_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu31ll, BFu7s_D_BFu31ll)
//============================================================================


struct  BFu7s_D_BFu32i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_D_BFu32i) C1{ Fs:7 FL Fi:32}



static void Test_BFu7s_D_BFu32i()
{
  {
    init_simple_test("BFu7s_D_BFu32i");
    static STRUCT_IF_C BFu7s_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu32i, BFu7s_D_BFu32i)
//============================================================================


struct  BFu7s_D_BFu32ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_D_BFu32ll) C1{ Fs:7 FL FL:32}



static void Test_BFu7s_D_BFu32ll()
{
  {
    init_simple_test("BFu7s_D_BFu32ll");
    static STRUCT_IF_C BFu7s_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu32ll, BFu7s_D_BFu32ll)
//============================================================================


struct  BFu7s_D_BFu33  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_D_BFu33) C1{ Fs:7 FL FL:33}



static void Test_BFu7s_D_BFu33()
{
  {
    init_simple_test("BFu7s_D_BFu33");
    static STRUCT_IF_C BFu7s_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7s_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7s_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu33, BFu7s_D_BFu33)
//============================================================================


struct  BFu7s_D_BFu7c  {
  unsigned short v1:7;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_D_BFu7c) C1{ Fs:7 FL Fc:7}



static void Test_BFu7s_D_BFu7c()
{
  {
    init_simple_test("BFu7s_D_BFu7c");
    static STRUCT_IF_C BFu7s_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu7c, BFu7s_D_BFu7c)
//============================================================================


struct  BFu7s_D_BFu7i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_D_BFu7i) C1{ Fs:7 FL Fi:7}



static void Test_BFu7s_D_BFu7i()
{
  {
    init_simple_test("BFu7s_D_BFu7i");
    static STRUCT_IF_C BFu7s_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu7i, BFu7s_D_BFu7i)
//============================================================================


struct  BFu7s_D_BFu7ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_D_BFu7ll) C1{ Fs:7 FL FL:7}



static void Test_BFu7s_D_BFu7ll()
{
  {
    init_simple_test("BFu7s_D_BFu7ll");
    static STRUCT_IF_C BFu7s_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu7ll, BFu7s_D_BFu7ll)
//============================================================================


struct  BFu7s_D_BFu7s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_D_BFu7s) C1{ Fs:7 FL Fs:7}



static void Test_BFu7s_D_BFu7s()
{
  {
    init_simple_test("BFu7s_D_BFu7s");
    static STRUCT_IF_C BFu7s_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu7s, BFu7s_D_BFu7s)
//============================================================================


struct  BFu7s_D_BFu8c  {
  unsigned short v1:7;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_D_BFu8c) C1{ Fs:7 FL Fc:8}



static void Test_BFu7s_D_BFu8c()
{
  {
    init_simple_test("BFu7s_D_BFu8c");
    static STRUCT_IF_C BFu7s_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu8c, BFu7s_D_BFu8c)
//============================================================================


struct  BFu7s_D_BFu8i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_D_BFu8i) C1{ Fs:7 FL Fi:8}



static void Test_BFu7s_D_BFu8i()
{
  {
    init_simple_test("BFu7s_D_BFu8i");
    static STRUCT_IF_C BFu7s_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu8i, BFu7s_D_BFu8i)
//============================================================================


struct  BFu7s_D_BFu8ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_D_BFu8ll) C1{ Fs:7 FL FL:8}



static void Test_BFu7s_D_BFu8ll()
{
  {
    init_simple_test("BFu7s_D_BFu8ll");
    static STRUCT_IF_C BFu7s_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu8ll, BFu7s_D_BFu8ll)
//============================================================================


struct  BFu7s_D_BFu8s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_D_BFu8s) C1{ Fs:7 FL Fs:8}



static void Test_BFu7s_D_BFu8s()
{
  {
    init_simple_test("BFu7s_D_BFu8s");
    static STRUCT_IF_C BFu7s_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu8s, BFu7s_D_BFu8s)
//============================================================================


struct  BFu7s_D_BFu9i  {
  unsigned short v1:7;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_D_BFu9i) C1{ Fs:7 FL Fi:9}



static void Test_BFu7s_D_BFu9i()
{
  {
    init_simple_test("BFu7s_D_BFu9i");
    static STRUCT_IF_C BFu7s_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu9i, BFu7s_D_BFu9i)
//============================================================================


struct  BFu7s_D_BFu9ll  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_D_BFu9ll) C1{ Fs:7 FL FL:9}



static void Test_BFu7s_D_BFu9ll()
{
  {
    init_simple_test("BFu7s_D_BFu9ll");
    static STRUCT_IF_C BFu7s_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu9ll, BFu7s_D_BFu9ll)
//============================================================================


struct  BFu7s_D_BFu9s  {
  unsigned short v1:7;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_D_BFu9s) C1{ Fs:7 FL Fs:9}



static void Test_BFu7s_D_BFu9s()
{
  {
    init_simple_test("BFu7s_D_BFu9s");
    static STRUCT_IF_C BFu7s_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_BFu9s, BFu7s_D_BFu9s)
//============================================================================


struct  BFu7s_D_C  {
  unsigned short v1:7;
  double v2;
  char v3;
};
//SIG(1 BFu7s_D_C) C1{ Fs:7 FL Fc}



static void Test_BFu7s_D_C()
{
  {
    init_simple_test("BFu7s_D_C");
    static STRUCT_IF_C BFu7s_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_C, BFu7s_D_C)
//============================================================================


struct  BFu7s_D_D  {
  unsigned short v1:7;
  double v2;
  double v3;
};
//SIG(1 BFu7s_D_D) C1{ Fs:7 FL[2]}



static void Test_BFu7s_D_D()
{
  {
    init_simple_test("BFu7s_D_D");
    static STRUCT_IF_C BFu7s_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_D, BFu7s_D_D)
//============================================================================


struct  BFu7s_D_F  {
  unsigned short v1:7;
  double v2;
  float v3;
};
//SIG(1 BFu7s_D_F) C1{ Fs:7 FL Fi}



static void Test_BFu7s_D_F()
{
  {
    init_simple_test("BFu7s_D_F");
    static STRUCT_IF_C BFu7s_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_F, BFu7s_D_F)
//============================================================================


struct  BFu7s_D_I  {
  unsigned short v1:7;
  double v2;
  int v3;
};
//SIG(1 BFu7s_D_I) C1{ Fs:7 FL Fi}



static void Test_BFu7s_D_I()
{
  {
    init_simple_test("BFu7s_D_I");
    static STRUCT_IF_C BFu7s_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_I, BFu7s_D_I)
//============================================================================


struct  BFu7s_D_Ip  {
  unsigned short v1:7;
  double v2;
  int *v3;
};
//SIG(1 BFu7s_D_Ip) C1{ Fs:7 FL Fp}



static void Test_BFu7s_D_Ip()
{
  {
    init_simple_test("BFu7s_D_Ip");
    static STRUCT_IF_C BFu7s_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Ip, BFu7s_D_Ip)
//============================================================================


struct  BFu7s_D_L  {
  unsigned short v1:7;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_D_L) C1{ Fs:7 FL[2]}



static void Test_BFu7s_D_L()
{
  {
    init_simple_test("BFu7s_D_L");
    static STRUCT_IF_C BFu7s_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_L, BFu7s_D_L)
//============================================================================


struct  BFu7s_D_S  {
  unsigned short v1:7;
  double v2;
  short v3;
};
//SIG(1 BFu7s_D_S) C1{ Fs:7 FL Fs}



static void Test_BFu7s_D_S()
{
  {
    init_simple_test("BFu7s_D_S");
    static STRUCT_IF_C BFu7s_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_S, BFu7s_D_S)
//============================================================================


struct  BFu7s_D_Uc  {
  unsigned short v1:7;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu7s_D_Uc) C1{ Fs:7 FL Fc}



static void Test_BFu7s_D_Uc()
{
  {
    init_simple_test("BFu7s_D_Uc");
    static STRUCT_IF_C BFu7s_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Uc, BFu7s_D_Uc)
//============================================================================


struct  BFu7s_D_Ui  {
  unsigned short v1:7;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu7s_D_Ui) C1{ Fs:7 FL Fi}



static void Test_BFu7s_D_Ui()
{
  {
    init_simple_test("BFu7s_D_Ui");
    static STRUCT_IF_C BFu7s_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Ui, BFu7s_D_Ui)
//============================================================================


struct  BFu7s_D_Ul  {
  unsigned short v1:7;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_D_Ul) C1{ Fs:7 FL[2]}



static void Test_BFu7s_D_Ul()
{
  {
    init_simple_test("BFu7s_D_Ul");
    static STRUCT_IF_C BFu7s_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Ul, BFu7s_D_Ul)
//============================================================================


struct  BFu7s_D_Us  {
  unsigned short v1:7;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu7s_D_Us) C1{ Fs:7 FL Fs}



static void Test_BFu7s_D_Us()
{
  {
    init_simple_test("BFu7s_D_Us");
    static STRUCT_IF_C BFu7s_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Us, BFu7s_D_Us)
//============================================================================


struct  BFu7s_D_Vp  {
  unsigned short v1:7;
  double v2;
  void *v3;
};
//SIG(1 BFu7s_D_Vp) C1{ Fs:7 FL Fp}



static void Test_BFu7s_D_Vp()
{
  {
    init_simple_test("BFu7s_D_Vp");
    static STRUCT_IF_C BFu7s_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_D_Vp, BFu7s_D_Vp)
//============================================================================


struct  BFu7s_F  {
  unsigned short v1:7;
  float v2;
};
//SIG(1 BFu7s_F) C1{ Fs:7 Fi}



static void Test_BFu7s_F()
{
  {
    init_simple_test("BFu7s_F");
    static STRUCT_IF_C BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F");
    check_field_offset(lv, v2, 4, "BFu7s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F, BFu7s_F)
//============================================================================


struct  BFu7s_F_BFu15i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_F_BFu15i) C1{ Fs:7 Fi Fi:15}



static void Test_BFu7s_F_BFu15i()
{
  {
    init_simple_test("BFu7s_F_BFu15i");
    static STRUCT_IF_C BFu7s_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu15i, BFu7s_F_BFu15i)
//============================================================================


struct  BFu7s_F_BFu15ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_F_BFu15ll) C1{ Fs:7 Fi FL:15}



static void Test_BFu7s_F_BFu15ll()
{
  {
    init_simple_test("BFu7s_F_BFu15ll");
    static STRUCT_IF_C BFu7s_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu15ll, BFu7s_F_BFu15ll)
//============================================================================


struct  BFu7s_F_BFu15s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_F_BFu15s) C1{ Fs:7 Fi Fs:15}



static void Test_BFu7s_F_BFu15s()
{
  {
    init_simple_test("BFu7s_F_BFu15s");
    static STRUCT_IF_C BFu7s_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu15s, BFu7s_F_BFu15s)
//============================================================================


struct  BFu7s_F_BFu16i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_F_BFu16i) C1{ Fs:7 Fi Fi:16}



static void Test_BFu7s_F_BFu16i()
{
  {
    init_simple_test("BFu7s_F_BFu16i");
    static STRUCT_IF_C BFu7s_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu16i, BFu7s_F_BFu16i)
//============================================================================


struct  BFu7s_F_BFu16ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_F_BFu16ll) C1{ Fs:7 Fi FL:16}



static void Test_BFu7s_F_BFu16ll()
{
  {
    init_simple_test("BFu7s_F_BFu16ll");
    static STRUCT_IF_C BFu7s_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu16ll, BFu7s_F_BFu16ll)
//============================================================================


struct  BFu7s_F_BFu16s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_F_BFu16s) C1{ Fs:7 Fi Fs:16}



static void Test_BFu7s_F_BFu16s()
{
  {
    init_simple_test("BFu7s_F_BFu16s");
    static STRUCT_IF_C BFu7s_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu16s, BFu7s_F_BFu16s)
//============================================================================


struct  BFu7s_F_BFu17i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_F_BFu17i) C1{ Fs:7 Fi Fi:17}



static void Test_BFu7s_F_BFu17i()
{
  {
    init_simple_test("BFu7s_F_BFu17i");
    static STRUCT_IF_C BFu7s_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu17i, BFu7s_F_BFu17i)
//============================================================================


struct  BFu7s_F_BFu17ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_F_BFu17ll) C1{ Fs:7 Fi FL:17}



static void Test_BFu7s_F_BFu17ll()
{
  {
    init_simple_test("BFu7s_F_BFu17ll");
    static STRUCT_IF_C BFu7s_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu17ll, BFu7s_F_BFu17ll)
//============================================================================


struct  BFu7s_F_BFu1c  {
  unsigned short v1:7;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_F_BFu1c) C1{ Fs:7 Fi Fc:1}



static void Test_BFu7s_F_BFu1c()
{
  {
    init_simple_test("BFu7s_F_BFu1c");
    static STRUCT_IF_C BFu7s_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu1c, BFu7s_F_BFu1c)
//============================================================================


struct  BFu7s_F_BFu1i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_F_BFu1i) C1{ Fs:7 Fi Fi:1}



static void Test_BFu7s_F_BFu1i()
{
  {
    init_simple_test("BFu7s_F_BFu1i");
    static STRUCT_IF_C BFu7s_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu1i, BFu7s_F_BFu1i)
//============================================================================


struct  BFu7s_F_BFu1ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_F_BFu1ll) C1{ Fs:7 Fi FL:1}



static void Test_BFu7s_F_BFu1ll()
{
  {
    init_simple_test("BFu7s_F_BFu1ll");
    static STRUCT_IF_C BFu7s_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu1ll, BFu7s_F_BFu1ll)
//============================================================================


struct  BFu7s_F_BFu1s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_F_BFu1s) C1{ Fs:7 Fi Fs:1}



static void Test_BFu7s_F_BFu1s()
{
  {
    init_simple_test("BFu7s_F_BFu1s");
    static STRUCT_IF_C BFu7s_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu1s, BFu7s_F_BFu1s)
//============================================================================


struct  BFu7s_F_BFu31i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_F_BFu31i) C1{ Fs:7 Fi Fi:31}



static void Test_BFu7s_F_BFu31i()
{
  {
    init_simple_test("BFu7s_F_BFu31i");
    static STRUCT_IF_C BFu7s_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu31i, BFu7s_F_BFu31i)
//============================================================================


struct  BFu7s_F_BFu31ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_F_BFu31ll) C1{ Fs:7 Fi FL:31}



static void Test_BFu7s_F_BFu31ll()
{
  {
    init_simple_test("BFu7s_F_BFu31ll");
    static STRUCT_IF_C BFu7s_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu31ll, BFu7s_F_BFu31ll)
//============================================================================


struct  BFu7s_F_BFu32i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_F_BFu32i) C1{ Fs:7 Fi Fi:32}



static void Test_BFu7s_F_BFu32i()
{
  {
    init_simple_test("BFu7s_F_BFu32i");
    static STRUCT_IF_C BFu7s_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu32i, BFu7s_F_BFu32i)
//============================================================================


struct  BFu7s_F_BFu32ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_F_BFu32ll) C1{ Fs:7 Fi FL:32}



static void Test_BFu7s_F_BFu32ll()
{
  {
    init_simple_test("BFu7s_F_BFu32ll");
    static STRUCT_IF_C BFu7s_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu32ll, BFu7s_F_BFu32ll)
//============================================================================


struct  BFu7s_F_BFu33  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_F_BFu33) C1{ Fs:7 Fi FL:33}



static void Test_BFu7s_F_BFu33()
{
  {
    init_simple_test("BFu7s_F_BFu33");
    static STRUCT_IF_C BFu7s_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7s_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7s_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu33, BFu7s_F_BFu33)
//============================================================================


struct  BFu7s_F_BFu7c  {
  unsigned short v1:7;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_F_BFu7c) C1{ Fs:7 Fi Fc:7}



static void Test_BFu7s_F_BFu7c()
{
  {
    init_simple_test("BFu7s_F_BFu7c");
    static STRUCT_IF_C BFu7s_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu7c, BFu7s_F_BFu7c)
//============================================================================


struct  BFu7s_F_BFu7i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_F_BFu7i) C1{ Fs:7 Fi Fi:7}



static void Test_BFu7s_F_BFu7i()
{
  {
    init_simple_test("BFu7s_F_BFu7i");
    static STRUCT_IF_C BFu7s_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu7i, BFu7s_F_BFu7i)
//============================================================================


struct  BFu7s_F_BFu7ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_F_BFu7ll) C1{ Fs:7 Fi FL:7}



static void Test_BFu7s_F_BFu7ll()
{
  {
    init_simple_test("BFu7s_F_BFu7ll");
    static STRUCT_IF_C BFu7s_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu7ll, BFu7s_F_BFu7ll)
//============================================================================


struct  BFu7s_F_BFu7s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_F_BFu7s) C1{ Fs:7 Fi Fs:7}



static void Test_BFu7s_F_BFu7s()
{
  {
    init_simple_test("BFu7s_F_BFu7s");
    static STRUCT_IF_C BFu7s_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu7s, BFu7s_F_BFu7s)
//============================================================================


struct  BFu7s_F_BFu8c  {
  unsigned short v1:7;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_F_BFu8c) C1{ Fs:7 Fi Fc:8}



static void Test_BFu7s_F_BFu8c()
{
  {
    init_simple_test("BFu7s_F_BFu8c");
    static STRUCT_IF_C BFu7s_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu8c, BFu7s_F_BFu8c)
//============================================================================


struct  BFu7s_F_BFu8i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_F_BFu8i) C1{ Fs:7 Fi Fi:8}



static void Test_BFu7s_F_BFu8i()
{
  {
    init_simple_test("BFu7s_F_BFu8i");
    static STRUCT_IF_C BFu7s_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu8i, BFu7s_F_BFu8i)
//============================================================================


struct  BFu7s_F_BFu8ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_F_BFu8ll) C1{ Fs:7 Fi FL:8}



static void Test_BFu7s_F_BFu8ll()
{
  {
    init_simple_test("BFu7s_F_BFu8ll");
    static STRUCT_IF_C BFu7s_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu8ll, BFu7s_F_BFu8ll)
//============================================================================


struct  BFu7s_F_BFu8s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_F_BFu8s) C1{ Fs:7 Fi Fs:8}



static void Test_BFu7s_F_BFu8s()
{
  {
    init_simple_test("BFu7s_F_BFu8s");
    static STRUCT_IF_C BFu7s_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu8s, BFu7s_F_BFu8s)
//============================================================================


struct  BFu7s_F_BFu9i  {
  unsigned short v1:7;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_F_BFu9i) C1{ Fs:7 Fi Fi:9}



static void Test_BFu7s_F_BFu9i()
{
  {
    init_simple_test("BFu7s_F_BFu9i");
    static STRUCT_IF_C BFu7s_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu9i, BFu7s_F_BFu9i)
//============================================================================


struct  BFu7s_F_BFu9ll  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_F_BFu9ll) C1{ Fs:7 Fi FL:9}



static void Test_BFu7s_F_BFu9ll()
{
  {
    init_simple_test("BFu7s_F_BFu9ll");
    static STRUCT_IF_C BFu7s_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu9ll, BFu7s_F_BFu9ll)
//============================================================================


struct  BFu7s_F_BFu9s  {
  unsigned short v1:7;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_F_BFu9s) C1{ Fs:7 Fi Fs:9}



static void Test_BFu7s_F_BFu9s()
{
  {
    init_simple_test("BFu7s_F_BFu9s");
    static STRUCT_IF_C BFu7s_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_BFu9s, BFu7s_F_BFu9s)
//============================================================================


struct  BFu7s_F_C  {
  unsigned short v1:7;
  float v2;
  char v3;
};
//SIG(1 BFu7s_F_C) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_F_C()
{
  {
    init_simple_test("BFu7s_F_C");
    static STRUCT_IF_C BFu7s_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_C");
    check_field_offset(lv, v2, 4, "BFu7s_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_C, BFu7s_F_C)
//============================================================================


struct  BFu7s_F_D  {
  unsigned short v1:7;
  float v2;
  double v3;
};
//SIG(1 BFu7s_F_D) C1{ Fs:7 Fi FL}



static void Test_BFu7s_F_D()
{
  {
    init_simple_test("BFu7s_F_D");
    static STRUCT_IF_C BFu7s_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_D");
    check_field_offset(lv, v2, 4, "BFu7s_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_D, BFu7s_F_D)
//============================================================================


struct  BFu7s_F_F  {
  unsigned short v1:7;
  float v2;
  float v3;
};
//SIG(1 BFu7s_F_F) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_F_F()
{
  {
    init_simple_test("BFu7s_F_F");
    static STRUCT_IF_C BFu7s_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_F");
    check_field_offset(lv, v2, 4, "BFu7s_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_F, BFu7s_F_F)
//============================================================================


struct  BFu7s_F_I  {
  unsigned short v1:7;
  float v2;
  int v3;
};
//SIG(1 BFu7s_F_I) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_F_I()
{
  {
    init_simple_test("BFu7s_F_I");
    static STRUCT_IF_C BFu7s_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_I");
    check_field_offset(lv, v2, 4, "BFu7s_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_I, BFu7s_F_I)
//============================================================================


struct  BFu7s_F_Ip  {
  unsigned short v1:7;
  float v2;
  int *v3;
};
//SIG(1 BFu7s_F_Ip) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_F_Ip()
{
  {
    init_simple_test("BFu7s_F_Ip");
    static STRUCT_IF_C BFu7s_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Ip");
    check_field_offset(lv, v2, 4, "BFu7s_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Ip, BFu7s_F_Ip)
//============================================================================


struct  BFu7s_F_L  {
  unsigned short v1:7;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_F_L) C1{ Fs:7 Fi FL}



static void Test_BFu7s_F_L()
{
  {
    init_simple_test("BFu7s_F_L");
    static STRUCT_IF_C BFu7s_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_L");
    check_field_offset(lv, v2, 4, "BFu7s_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_L, BFu7s_F_L)
//============================================================================


struct  BFu7s_F_S  {
  unsigned short v1:7;
  float v2;
  short v3;
};
//SIG(1 BFu7s_F_S) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_F_S()
{
  {
    init_simple_test("BFu7s_F_S");
    static STRUCT_IF_C BFu7s_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_S");
    check_field_offset(lv, v2, 4, "BFu7s_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_S, BFu7s_F_S)
//============================================================================


struct  BFu7s_F_Uc  {
  unsigned short v1:7;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu7s_F_Uc) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_F_Uc()
{
  {
    init_simple_test("BFu7s_F_Uc");
    static STRUCT_IF_C BFu7s_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Uc");
    check_field_offset(lv, v2, 4, "BFu7s_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Uc, BFu7s_F_Uc)
//============================================================================


struct  BFu7s_F_Ui  {
  unsigned short v1:7;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu7s_F_Ui) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_F_Ui()
{
  {
    init_simple_test("BFu7s_F_Ui");
    static STRUCT_IF_C BFu7s_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Ui, BFu7s_F_Ui)
//============================================================================


struct  BFu7s_F_Ul  {
  unsigned short v1:7;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_F_Ul) C1{ Fs:7 Fi FL}



static void Test_BFu7s_F_Ul()
{
  {
    init_simple_test("BFu7s_F_Ul");
    static STRUCT_IF_C BFu7s_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Ul");
    check_field_offset(lv, v2, 4, "BFu7s_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Ul, BFu7s_F_Ul)
//============================================================================


struct  BFu7s_F_Us  {
  unsigned short v1:7;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu7s_F_Us) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_F_Us()
{
  {
    init_simple_test("BFu7s_F_Us");
    static STRUCT_IF_C BFu7s_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Us");
    check_field_offset(lv, v2, 4, "BFu7s_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Us, BFu7s_F_Us)
//============================================================================


struct  BFu7s_F_Vp  {
  unsigned short v1:7;
  float v2;
  void *v3;
};
//SIG(1 BFu7s_F_Vp) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_F_Vp()
{
  {
    init_simple_test("BFu7s_F_Vp");
    static STRUCT_IF_C BFu7s_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_Vp");
    check_field_offset(lv, v2, 4, "BFu7s_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7s_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_F_Vp, BFu7s_F_Vp)
//============================================================================


struct  BFu7s_I  {
  unsigned short v1:7;
  int v2;
};
//SIG(1 BFu7s_I) C1{ Fs:7 Fi}



static void Test_BFu7s_I()
{
  {
    init_simple_test("BFu7s_I");
    static STRUCT_IF_C BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I");
    check_field_offset(lv, v2, 4, "BFu7s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I, BFu7s_I)
//============================================================================


struct  BFu7s_I_BFu15i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_I_BFu15i) C1{ Fs:7 Fi Fi:15}



static void Test_BFu7s_I_BFu15i()
{
  {
    init_simple_test("BFu7s_I_BFu15i");
    static STRUCT_IF_C BFu7s_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu15i, BFu7s_I_BFu15i)
//============================================================================


struct  BFu7s_I_BFu15ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_I_BFu15ll) C1{ Fs:7 Fi FL:15}



static void Test_BFu7s_I_BFu15ll()
{
  {
    init_simple_test("BFu7s_I_BFu15ll");
    static STRUCT_IF_C BFu7s_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu15ll, BFu7s_I_BFu15ll)
//============================================================================


struct  BFu7s_I_BFu15s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_I_BFu15s) C1{ Fs:7 Fi Fs:15}



static void Test_BFu7s_I_BFu15s()
{
  {
    init_simple_test("BFu7s_I_BFu15s");
    static STRUCT_IF_C BFu7s_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu15s, BFu7s_I_BFu15s)
//============================================================================


struct  BFu7s_I_BFu16i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_I_BFu16i) C1{ Fs:7 Fi Fi:16}



static void Test_BFu7s_I_BFu16i()
{
  {
    init_simple_test("BFu7s_I_BFu16i");
    static STRUCT_IF_C BFu7s_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu16i, BFu7s_I_BFu16i)
//============================================================================


struct  BFu7s_I_BFu16ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_I_BFu16ll) C1{ Fs:7 Fi FL:16}



static void Test_BFu7s_I_BFu16ll()
{
  {
    init_simple_test("BFu7s_I_BFu16ll");
    static STRUCT_IF_C BFu7s_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu16ll, BFu7s_I_BFu16ll)
//============================================================================


struct  BFu7s_I_BFu16s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_I_BFu16s) C1{ Fs:7 Fi Fs:16}



static void Test_BFu7s_I_BFu16s()
{
  {
    init_simple_test("BFu7s_I_BFu16s");
    static STRUCT_IF_C BFu7s_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu16s, BFu7s_I_BFu16s)
//============================================================================


struct  BFu7s_I_BFu17i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_I_BFu17i) C1{ Fs:7 Fi Fi:17}



static void Test_BFu7s_I_BFu17i()
{
  {
    init_simple_test("BFu7s_I_BFu17i");
    static STRUCT_IF_C BFu7s_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu17i, BFu7s_I_BFu17i)
//============================================================================


struct  BFu7s_I_BFu17ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_I_BFu17ll) C1{ Fs:7 Fi FL:17}



static void Test_BFu7s_I_BFu17ll()
{
  {
    init_simple_test("BFu7s_I_BFu17ll");
    static STRUCT_IF_C BFu7s_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu17ll, BFu7s_I_BFu17ll)
//============================================================================


struct  BFu7s_I_BFu1c  {
  unsigned short v1:7;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_I_BFu1c) C1{ Fs:7 Fi Fc:1}



static void Test_BFu7s_I_BFu1c()
{
  {
    init_simple_test("BFu7s_I_BFu1c");
    static STRUCT_IF_C BFu7s_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu1c, BFu7s_I_BFu1c)
//============================================================================


struct  BFu7s_I_BFu1i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_I_BFu1i) C1{ Fs:7 Fi Fi:1}



static void Test_BFu7s_I_BFu1i()
{
  {
    init_simple_test("BFu7s_I_BFu1i");
    static STRUCT_IF_C BFu7s_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu1i, BFu7s_I_BFu1i)
//============================================================================


struct  BFu7s_I_BFu1ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_I_BFu1ll) C1{ Fs:7 Fi FL:1}



static void Test_BFu7s_I_BFu1ll()
{
  {
    init_simple_test("BFu7s_I_BFu1ll");
    static STRUCT_IF_C BFu7s_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu1ll, BFu7s_I_BFu1ll)
//============================================================================


struct  BFu7s_I_BFu1s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_I_BFu1s) C1{ Fs:7 Fi Fs:1}



static void Test_BFu7s_I_BFu1s()
{
  {
    init_simple_test("BFu7s_I_BFu1s");
    static STRUCT_IF_C BFu7s_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu1s, BFu7s_I_BFu1s)
//============================================================================


struct  BFu7s_I_BFu31i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_I_BFu31i) C1{ Fs:7 Fi Fi:31}



static void Test_BFu7s_I_BFu31i()
{
  {
    init_simple_test("BFu7s_I_BFu31i");
    static STRUCT_IF_C BFu7s_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu31i, BFu7s_I_BFu31i)
//============================================================================


struct  BFu7s_I_BFu31ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_I_BFu31ll) C1{ Fs:7 Fi FL:31}



static void Test_BFu7s_I_BFu31ll()
{
  {
    init_simple_test("BFu7s_I_BFu31ll");
    static STRUCT_IF_C BFu7s_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu31ll, BFu7s_I_BFu31ll)
//============================================================================


struct  BFu7s_I_BFu32i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_I_BFu32i) C1{ Fs:7 Fi Fi:32}



static void Test_BFu7s_I_BFu32i()
{
  {
    init_simple_test("BFu7s_I_BFu32i");
    static STRUCT_IF_C BFu7s_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu32i, BFu7s_I_BFu32i)
//============================================================================


struct  BFu7s_I_BFu32ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_I_BFu32ll) C1{ Fs:7 Fi FL:32}



static void Test_BFu7s_I_BFu32ll()
{
  {
    init_simple_test("BFu7s_I_BFu32ll");
    static STRUCT_IF_C BFu7s_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu32ll, BFu7s_I_BFu32ll)
//============================================================================


struct  BFu7s_I_BFu33  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_I_BFu33) C1{ Fs:7 Fi FL:33}



static void Test_BFu7s_I_BFu33()
{
  {
    init_simple_test("BFu7s_I_BFu33");
    static STRUCT_IF_C BFu7s_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7s_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7s_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu33, BFu7s_I_BFu33)
//============================================================================


struct  BFu7s_I_BFu7c  {
  unsigned short v1:7;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_I_BFu7c) C1{ Fs:7 Fi Fc:7}



static void Test_BFu7s_I_BFu7c()
{
  {
    init_simple_test("BFu7s_I_BFu7c");
    static STRUCT_IF_C BFu7s_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu7c, BFu7s_I_BFu7c)
//============================================================================


struct  BFu7s_I_BFu7i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_I_BFu7i) C1{ Fs:7 Fi Fi:7}



static void Test_BFu7s_I_BFu7i()
{
  {
    init_simple_test("BFu7s_I_BFu7i");
    static STRUCT_IF_C BFu7s_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu7i, BFu7s_I_BFu7i)
//============================================================================


struct  BFu7s_I_BFu7ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_I_BFu7ll) C1{ Fs:7 Fi FL:7}



static void Test_BFu7s_I_BFu7ll()
{
  {
    init_simple_test("BFu7s_I_BFu7ll");
    static STRUCT_IF_C BFu7s_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu7ll, BFu7s_I_BFu7ll)
//============================================================================


struct  BFu7s_I_BFu7s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_I_BFu7s) C1{ Fs:7 Fi Fs:7}



static void Test_BFu7s_I_BFu7s()
{
  {
    init_simple_test("BFu7s_I_BFu7s");
    static STRUCT_IF_C BFu7s_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu7s, BFu7s_I_BFu7s)
//============================================================================


struct  BFu7s_I_BFu8c  {
  unsigned short v1:7;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_I_BFu8c) C1{ Fs:7 Fi Fc:8}



static void Test_BFu7s_I_BFu8c()
{
  {
    init_simple_test("BFu7s_I_BFu8c");
    static STRUCT_IF_C BFu7s_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu8c, BFu7s_I_BFu8c)
//============================================================================


struct  BFu7s_I_BFu8i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_I_BFu8i) C1{ Fs:7 Fi Fi:8}



static void Test_BFu7s_I_BFu8i()
{
  {
    init_simple_test("BFu7s_I_BFu8i");
    static STRUCT_IF_C BFu7s_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu8i, BFu7s_I_BFu8i)
//============================================================================


struct  BFu7s_I_BFu8ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_I_BFu8ll) C1{ Fs:7 Fi FL:8}



static void Test_BFu7s_I_BFu8ll()
{
  {
    init_simple_test("BFu7s_I_BFu8ll");
    static STRUCT_IF_C BFu7s_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu8ll, BFu7s_I_BFu8ll)
//============================================================================


struct  BFu7s_I_BFu8s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_I_BFu8s) C1{ Fs:7 Fi Fs:8}



static void Test_BFu7s_I_BFu8s()
{
  {
    init_simple_test("BFu7s_I_BFu8s");
    static STRUCT_IF_C BFu7s_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu8s, BFu7s_I_BFu8s)
//============================================================================


struct  BFu7s_I_BFu9i  {
  unsigned short v1:7;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_I_BFu9i) C1{ Fs:7 Fi Fi:9}



static void Test_BFu7s_I_BFu9i()
{
  {
    init_simple_test("BFu7s_I_BFu9i");
    static STRUCT_IF_C BFu7s_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu9i, BFu7s_I_BFu9i)
//============================================================================


struct  BFu7s_I_BFu9ll  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_I_BFu9ll) C1{ Fs:7 Fi FL:9}



static void Test_BFu7s_I_BFu9ll()
{
  {
    init_simple_test("BFu7s_I_BFu9ll");
    static STRUCT_IF_C BFu7s_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu9ll, BFu7s_I_BFu9ll)
//============================================================================


struct  BFu7s_I_BFu9s  {
  unsigned short v1:7;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_I_BFu9s) C1{ Fs:7 Fi Fs:9}



static void Test_BFu7s_I_BFu9s()
{
  {
    init_simple_test("BFu7s_I_BFu9s");
    static STRUCT_IF_C BFu7s_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_BFu9s, BFu7s_I_BFu9s)
//============================================================================


struct  BFu7s_I_C  {
  unsigned short v1:7;
  int v2;
  char v3;
};
//SIG(1 BFu7s_I_C) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_I_C()
{
  {
    init_simple_test("BFu7s_I_C");
    static STRUCT_IF_C BFu7s_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_C");
    check_field_offset(lv, v2, 4, "BFu7s_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_C, BFu7s_I_C)
//============================================================================


struct  BFu7s_I_D  {
  unsigned short v1:7;
  int v2;
  double v3;
};
//SIG(1 BFu7s_I_D) C1{ Fs:7 Fi FL}



static void Test_BFu7s_I_D()
{
  {
    init_simple_test("BFu7s_I_D");
    static STRUCT_IF_C BFu7s_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_D");
    check_field_offset(lv, v2, 4, "BFu7s_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_D, BFu7s_I_D)
//============================================================================


struct  BFu7s_I_F  {
  unsigned short v1:7;
  int v2;
  float v3;
};
//SIG(1 BFu7s_I_F) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_I_F()
{
  {
    init_simple_test("BFu7s_I_F");
    static STRUCT_IF_C BFu7s_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_F");
    check_field_offset(lv, v2, 4, "BFu7s_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_F, BFu7s_I_F)
//============================================================================


struct  BFu7s_I_I  {
  unsigned short v1:7;
  int v2;
  int v3;
};
//SIG(1 BFu7s_I_I) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_I_I()
{
  {
    init_simple_test("BFu7s_I_I");
    static STRUCT_IF_C BFu7s_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_I");
    check_field_offset(lv, v2, 4, "BFu7s_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_I, BFu7s_I_I)
//============================================================================


struct  BFu7s_I_Ip  {
  unsigned short v1:7;
  int v2;
  int *v3;
};
//SIG(1 BFu7s_I_Ip) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_I_Ip()
{
  {
    init_simple_test("BFu7s_I_Ip");
    static STRUCT_IF_C BFu7s_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Ip");
    check_field_offset(lv, v2, 4, "BFu7s_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Ip, BFu7s_I_Ip)
//============================================================================


struct  BFu7s_I_L  {
  unsigned short v1:7;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_I_L) C1{ Fs:7 Fi FL}



static void Test_BFu7s_I_L()
{
  {
    init_simple_test("BFu7s_I_L");
    static STRUCT_IF_C BFu7s_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_L");
    check_field_offset(lv, v2, 4, "BFu7s_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_L, BFu7s_I_L)
//============================================================================


struct  BFu7s_I_S  {
  unsigned short v1:7;
  int v2;
  short v3;
};
//SIG(1 BFu7s_I_S) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_I_S()
{
  {
    init_simple_test("BFu7s_I_S");
    static STRUCT_IF_C BFu7s_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_S");
    check_field_offset(lv, v2, 4, "BFu7s_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_S, BFu7s_I_S)
//============================================================================


struct  BFu7s_I_Uc  {
  unsigned short v1:7;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu7s_I_Uc) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_I_Uc()
{
  {
    init_simple_test("BFu7s_I_Uc");
    static STRUCT_IF_C BFu7s_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Uc");
    check_field_offset(lv, v2, 4, "BFu7s_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Uc, BFu7s_I_Uc)
//============================================================================


struct  BFu7s_I_Ui  {
  unsigned short v1:7;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu7s_I_Ui) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_I_Ui()
{
  {
    init_simple_test("BFu7s_I_Ui");
    static STRUCT_IF_C BFu7s_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Ui, BFu7s_I_Ui)
//============================================================================


struct  BFu7s_I_Ul  {
  unsigned short v1:7;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_I_Ul) C1{ Fs:7 Fi FL}



static void Test_BFu7s_I_Ul()
{
  {
    init_simple_test("BFu7s_I_Ul");
    static STRUCT_IF_C BFu7s_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Ul");
    check_field_offset(lv, v2, 4, "BFu7s_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Ul, BFu7s_I_Ul)
//============================================================================


struct  BFu7s_I_Us  {
  unsigned short v1:7;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu7s_I_Us) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_I_Us()
{
  {
    init_simple_test("BFu7s_I_Us");
    static STRUCT_IF_C BFu7s_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Us");
    check_field_offset(lv, v2, 4, "BFu7s_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Us, BFu7s_I_Us)
//============================================================================


struct  BFu7s_I_Vp  {
  unsigned short v1:7;
  int v2;
  void *v3;
};
//SIG(1 BFu7s_I_Vp) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_I_Vp()
{
  {
    init_simple_test("BFu7s_I_Vp");
    static STRUCT_IF_C BFu7s_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_Vp");
    check_field_offset(lv, v2, 4, "BFu7s_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7s_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_I_Vp, BFu7s_I_Vp)
//============================================================================


struct  BFu7s_Ip  {
  unsigned short v1:7;
  int *v2;
};
//SIG(1 BFu7s_Ip) C1{ Fs:7 Fp}



static void Test_BFu7s_Ip()
{
  {
    init_simple_test("BFu7s_Ip");
    static STRUCT_IF_C BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip, BFu7s_Ip)
//============================================================================


struct  BFu7s_Ip_BFu15i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Ip_BFu15i) C1{ Fs:7 Fp Fi:15}



static void Test_BFu7s_Ip_BFu15i()
{
  {
    init_simple_test("BFu7s_Ip_BFu15i");
    static STRUCT_IF_C BFu7s_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu15i, BFu7s_Ip_BFu15i)
//============================================================================


struct  BFu7s_Ip_BFu15ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Ip_BFu15ll) C1{ Fs:7 Fp FL:15}



static void Test_BFu7s_Ip_BFu15ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu15ll");
    static STRUCT_IF_C BFu7s_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu15ll, BFu7s_Ip_BFu15ll)
//============================================================================


struct  BFu7s_Ip_BFu15s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Ip_BFu15s) C1{ Fs:7 Fp Fs:15}



static void Test_BFu7s_Ip_BFu15s()
{
  {
    init_simple_test("BFu7s_Ip_BFu15s");
    static STRUCT_IF_C BFu7s_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu15s, BFu7s_Ip_BFu15s)
//============================================================================


struct  BFu7s_Ip_BFu16i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Ip_BFu16i) C1{ Fs:7 Fp Fi:16}



static void Test_BFu7s_Ip_BFu16i()
{
  {
    init_simple_test("BFu7s_Ip_BFu16i");
    static STRUCT_IF_C BFu7s_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu16i, BFu7s_Ip_BFu16i)
//============================================================================


struct  BFu7s_Ip_BFu16ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Ip_BFu16ll) C1{ Fs:7 Fp FL:16}



static void Test_BFu7s_Ip_BFu16ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu16ll");
    static STRUCT_IF_C BFu7s_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu16ll, BFu7s_Ip_BFu16ll)
//============================================================================


struct  BFu7s_Ip_BFu16s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Ip_BFu16s) C1{ Fs:7 Fp Fs:16}



static void Test_BFu7s_Ip_BFu16s()
{
  {
    init_simple_test("BFu7s_Ip_BFu16s");
    static STRUCT_IF_C BFu7s_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu16s, BFu7s_Ip_BFu16s)
//============================================================================


struct  BFu7s_Ip_BFu17i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Ip_BFu17i) C1{ Fs:7 Fp Fi:17}



static void Test_BFu7s_Ip_BFu17i()
{
  {
    init_simple_test("BFu7s_Ip_BFu17i");
    static STRUCT_IF_C BFu7s_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7s_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7s_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu17i, BFu7s_Ip_BFu17i)
//============================================================================


struct  BFu7s_Ip_BFu17ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Ip_BFu17ll) C1{ Fs:7 Fp FL:17}



static void Test_BFu7s_Ip_BFu17ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu17ll");
    static STRUCT_IF_C BFu7s_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7s_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7s_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu17ll, BFu7s_Ip_BFu17ll)
//============================================================================


struct  BFu7s_Ip_BFu1c  {
  unsigned short v1:7;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Ip_BFu1c) C1{ Fs:7 Fp Fc:1}



static void Test_BFu7s_Ip_BFu1c()
{
  {
    init_simple_test("BFu7s_Ip_BFu1c");
    static STRUCT_IF_C BFu7s_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu1c, BFu7s_Ip_BFu1c)
//============================================================================


struct  BFu7s_Ip_BFu1i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Ip_BFu1i) C1{ Fs:7 Fp Fi:1}



static void Test_BFu7s_Ip_BFu1i()
{
  {
    init_simple_test("BFu7s_Ip_BFu1i");
    static STRUCT_IF_C BFu7s_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu1i, BFu7s_Ip_BFu1i)
//============================================================================


struct  BFu7s_Ip_BFu1ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Ip_BFu1ll) C1{ Fs:7 Fp FL:1}



static void Test_BFu7s_Ip_BFu1ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu1ll");
    static STRUCT_IF_C BFu7s_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu1ll, BFu7s_Ip_BFu1ll)
//============================================================================


struct  BFu7s_Ip_BFu1s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Ip_BFu1s) C1{ Fs:7 Fp Fs:1}



static void Test_BFu7s_Ip_BFu1s()
{
  {
    init_simple_test("BFu7s_Ip_BFu1s");
    static STRUCT_IF_C BFu7s_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu1s, BFu7s_Ip_BFu1s)
//============================================================================


struct  BFu7s_Ip_BFu31i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Ip_BFu31i) C1{ Fs:7 Fp Fi:31}



static void Test_BFu7s_Ip_BFu31i()
{
  {
    init_simple_test("BFu7s_Ip_BFu31i");
    static STRUCT_IF_C BFu7s_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7s_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7s_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu31i, BFu7s_Ip_BFu31i)
//============================================================================


struct  BFu7s_Ip_BFu31ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Ip_BFu31ll) C1{ Fs:7 Fp FL:31}



static void Test_BFu7s_Ip_BFu31ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu31ll");
    static STRUCT_IF_C BFu7s_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7s_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7s_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu31ll, BFu7s_Ip_BFu31ll)
//============================================================================


struct  BFu7s_Ip_BFu32i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Ip_BFu32i) C1{ Fs:7 Fp Fi:32}



static void Test_BFu7s_Ip_BFu32i()
{
  {
    init_simple_test("BFu7s_Ip_BFu32i");
    static STRUCT_IF_C BFu7s_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7s_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7s_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu32i, BFu7s_Ip_BFu32i)
//============================================================================


struct  BFu7s_Ip_BFu32ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Ip_BFu32ll) C1{ Fs:7 Fp FL:32}



static void Test_BFu7s_Ip_BFu32ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu32ll");
    static STRUCT_IF_C BFu7s_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7s_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7s_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu32ll, BFu7s_Ip_BFu32ll)
//============================================================================


struct  BFu7s_Ip_BFu33  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Ip_BFu33) C1{ Fs:7 Fp FL:33}



static void Test_BFu7s_Ip_BFu33()
{
  {
    init_simple_test("BFu7s_Ip_BFu33");
    static STRUCT_IF_C BFu7s_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7s_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7s_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu33, BFu7s_Ip_BFu33)
//============================================================================


struct  BFu7s_Ip_BFu7c  {
  unsigned short v1:7;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Ip_BFu7c) C1{ Fs:7 Fp Fc:7}



static void Test_BFu7s_Ip_BFu7c()
{
  {
    init_simple_test("BFu7s_Ip_BFu7c");
    static STRUCT_IF_C BFu7s_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu7c, BFu7s_Ip_BFu7c)
//============================================================================


struct  BFu7s_Ip_BFu7i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Ip_BFu7i) C1{ Fs:7 Fp Fi:7}



static void Test_BFu7s_Ip_BFu7i()
{
  {
    init_simple_test("BFu7s_Ip_BFu7i");
    static STRUCT_IF_C BFu7s_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu7i, BFu7s_Ip_BFu7i)
//============================================================================


struct  BFu7s_Ip_BFu7ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Ip_BFu7ll) C1{ Fs:7 Fp FL:7}



static void Test_BFu7s_Ip_BFu7ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu7ll");
    static STRUCT_IF_C BFu7s_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu7ll, BFu7s_Ip_BFu7ll)
//============================================================================


struct  BFu7s_Ip_BFu7s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Ip_BFu7s) C1{ Fs:7 Fp Fs:7}



static void Test_BFu7s_Ip_BFu7s()
{
  {
    init_simple_test("BFu7s_Ip_BFu7s");
    static STRUCT_IF_C BFu7s_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu7s, BFu7s_Ip_BFu7s)
//============================================================================


struct  BFu7s_Ip_BFu8c  {
  unsigned short v1:7;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Ip_BFu8c) C1{ Fs:7 Fp Fc:8}



static void Test_BFu7s_Ip_BFu8c()
{
  {
    init_simple_test("BFu7s_Ip_BFu8c");
    static STRUCT_IF_C BFu7s_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu8c, BFu7s_Ip_BFu8c)
//============================================================================


struct  BFu7s_Ip_BFu8i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Ip_BFu8i) C1{ Fs:7 Fp Fi:8}



static void Test_BFu7s_Ip_BFu8i()
{
  {
    init_simple_test("BFu7s_Ip_BFu8i");
    static STRUCT_IF_C BFu7s_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu8i, BFu7s_Ip_BFu8i)
//============================================================================


struct  BFu7s_Ip_BFu8ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Ip_BFu8ll) C1{ Fs:7 Fp FL:8}



static void Test_BFu7s_Ip_BFu8ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu8ll");
    static STRUCT_IF_C BFu7s_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu8ll, BFu7s_Ip_BFu8ll)
//============================================================================


struct  BFu7s_Ip_BFu8s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Ip_BFu8s) C1{ Fs:7 Fp Fs:8}



static void Test_BFu7s_Ip_BFu8s()
{
  {
    init_simple_test("BFu7s_Ip_BFu8s");
    static STRUCT_IF_C BFu7s_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu8s, BFu7s_Ip_BFu8s)
//============================================================================


struct  BFu7s_Ip_BFu9i  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Ip_BFu9i) C1{ Fs:7 Fp Fi:9}



static void Test_BFu7s_Ip_BFu9i()
{
  {
    init_simple_test("BFu7s_Ip_BFu9i");
    static STRUCT_IF_C BFu7s_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu9i, BFu7s_Ip_BFu9i)
//============================================================================


struct  BFu7s_Ip_BFu9ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Ip_BFu9ll) C1{ Fs:7 Fp FL:9}



static void Test_BFu7s_Ip_BFu9ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu9ll");
    static STRUCT_IF_C BFu7s_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu9ll, BFu7s_Ip_BFu9ll)
//============================================================================


struct  BFu7s_Ip_BFu9s  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Ip_BFu9s) C1{ Fs:7 Fp Fs:9}



static void Test_BFu7s_Ip_BFu9s()
{
  {
    init_simple_test("BFu7s_Ip_BFu9s");
    static STRUCT_IF_C BFu7s_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_BFu9s, BFu7s_Ip_BFu9s)
//============================================================================


struct  BFu7s_Ip_C  {
  unsigned short v1:7;
  int *v2;
  char v3;
};
//SIG(1 BFu7s_Ip_C) C1{ Fs:7 Fp Fc}



static void Test_BFu7s_Ip_C()
{
  {
    init_simple_test("BFu7s_Ip_C");
    static STRUCT_IF_C BFu7s_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_C, BFu7s_Ip_C)
//============================================================================


struct  BFu7s_Ip_D  {
  unsigned short v1:7;
  int *v2;
  double v3;
};
//SIG(1 BFu7s_Ip_D) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Ip_D()
{
  {
    init_simple_test("BFu7s_Ip_D");
    static STRUCT_IF_C BFu7s_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_D, BFu7s_Ip_D)
//============================================================================


struct  BFu7s_Ip_F  {
  unsigned short v1:7;
  int *v2;
  float v3;
};
//SIG(1 BFu7s_Ip_F) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Ip_F()
{
  {
    init_simple_test("BFu7s_Ip_F");
    static STRUCT_IF_C BFu7s_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_F, BFu7s_Ip_F)
//============================================================================


struct  BFu7s_Ip_I  {
  unsigned short v1:7;
  int *v2;
  int v3;
};
//SIG(1 BFu7s_Ip_I) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Ip_I()
{
  {
    init_simple_test("BFu7s_Ip_I");
    static STRUCT_IF_C BFu7s_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_I, BFu7s_Ip_I)
//============================================================================


struct  BFu7s_Ip_Ip  {
  unsigned short v1:7;
  int *v2;
  int *v3;
};
//SIG(1 BFu7s_Ip_Ip) C1{ Fs:7 Fp[2]}



static void Test_BFu7s_Ip_Ip()
{
  {
    init_simple_test("BFu7s_Ip_Ip");
    static STRUCT_IF_C BFu7s_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Ip, BFu7s_Ip_Ip)
//============================================================================


struct  BFu7s_Ip_L  {
  unsigned short v1:7;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Ip_L) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Ip_L()
{
  {
    init_simple_test("BFu7s_Ip_L");
    static STRUCT_IF_C BFu7s_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_L, BFu7s_Ip_L)
//============================================================================


struct  BFu7s_Ip_S  {
  unsigned short v1:7;
  int *v2;
  short v3;
};
//SIG(1 BFu7s_Ip_S) C1{ Fs:7 Fp Fs}



static void Test_BFu7s_Ip_S()
{
  {
    init_simple_test("BFu7s_Ip_S");
    static STRUCT_IF_C BFu7s_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_S, BFu7s_Ip_S)
//============================================================================


struct  BFu7s_Ip_Uc  {
  unsigned short v1:7;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Ip_Uc) C1{ Fs:7 Fp Fc}



static void Test_BFu7s_Ip_Uc()
{
  {
    init_simple_test("BFu7s_Ip_Uc");
    static STRUCT_IF_C BFu7s_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Uc, BFu7s_Ip_Uc)
//============================================================================


struct  BFu7s_Ip_Ui  {
  unsigned short v1:7;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Ip_Ui) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Ip_Ui()
{
  {
    init_simple_test("BFu7s_Ip_Ui");
    static STRUCT_IF_C BFu7s_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Ui, BFu7s_Ip_Ui)
//============================================================================


struct  BFu7s_Ip_Ul  {
  unsigned short v1:7;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Ip_Ul) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Ip_Ul()
{
  {
    init_simple_test("BFu7s_Ip_Ul");
    static STRUCT_IF_C BFu7s_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Ul, BFu7s_Ip_Ul)
//============================================================================


struct  BFu7s_Ip_Us  {
  unsigned short v1:7;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Ip_Us) C1{ Fs:7 Fp Fs}



static void Test_BFu7s_Ip_Us()
{
  {
    init_simple_test("BFu7s_Ip_Us");
    static STRUCT_IF_C BFu7s_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Us, BFu7s_Ip_Us)
//============================================================================


struct  BFu7s_Ip_Vp  {
  unsigned short v1:7;
  int *v2;
  void *v3;
};
//SIG(1 BFu7s_Ip_Vp) C1{ Fs:7 Fp[2]}



static void Test_BFu7s_Ip_Vp()
{
  {
    init_simple_test("BFu7s_Ip_Vp");
    static STRUCT_IF_C BFu7s_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ip_Vp, BFu7s_Ip_Vp)
//============================================================================


struct  BFu7s_L  {
  unsigned short v1:7;
  __tsi64 v2;
};
//SIG(1 BFu7s_L) C1{ Fs:7 FL}



static void Test_BFu7s_L()
{
  {
    init_simple_test("BFu7s_L");
    static STRUCT_IF_C BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L, BFu7s_L)
//============================================================================


struct  BFu7s_L_BFu15i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_L_BFu15i) C1{ Fs:7 FL Fi:15}



static void Test_BFu7s_L_BFu15i()
{
  {
    init_simple_test("BFu7s_L_BFu15i");
    static STRUCT_IF_C BFu7s_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu15i, BFu7s_L_BFu15i)
//============================================================================


struct  BFu7s_L_BFu15ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_L_BFu15ll) C1{ Fs:7 FL FL:15}



static void Test_BFu7s_L_BFu15ll()
{
  {
    init_simple_test("BFu7s_L_BFu15ll");
    static STRUCT_IF_C BFu7s_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu15ll, BFu7s_L_BFu15ll)
//============================================================================


struct  BFu7s_L_BFu15s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_L_BFu15s) C1{ Fs:7 FL Fs:15}



static void Test_BFu7s_L_BFu15s()
{
  {
    init_simple_test("BFu7s_L_BFu15s");
    static STRUCT_IF_C BFu7s_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu15s, BFu7s_L_BFu15s)
//============================================================================


struct  BFu7s_L_BFu16i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_L_BFu16i) C1{ Fs:7 FL Fi:16}



static void Test_BFu7s_L_BFu16i()
{
  {
    init_simple_test("BFu7s_L_BFu16i");
    static STRUCT_IF_C BFu7s_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu16i, BFu7s_L_BFu16i)
//============================================================================


struct  BFu7s_L_BFu16ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_L_BFu16ll) C1{ Fs:7 FL FL:16}



static void Test_BFu7s_L_BFu16ll()
{
  {
    init_simple_test("BFu7s_L_BFu16ll");
    static STRUCT_IF_C BFu7s_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu16ll, BFu7s_L_BFu16ll)
//============================================================================


struct  BFu7s_L_BFu16s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_L_BFu16s) C1{ Fs:7 FL Fs:16}



static void Test_BFu7s_L_BFu16s()
{
  {
    init_simple_test("BFu7s_L_BFu16s");
    static STRUCT_IF_C BFu7s_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu16s, BFu7s_L_BFu16s)
//============================================================================


struct  BFu7s_L_BFu17i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_L_BFu17i) C1{ Fs:7 FL Fi:17}



static void Test_BFu7s_L_BFu17i()
{
  {
    init_simple_test("BFu7s_L_BFu17i");
    static STRUCT_IF_C BFu7s_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu17i, BFu7s_L_BFu17i)
//============================================================================


struct  BFu7s_L_BFu17ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_L_BFu17ll) C1{ Fs:7 FL FL:17}



static void Test_BFu7s_L_BFu17ll()
{
  {
    init_simple_test("BFu7s_L_BFu17ll");
    static STRUCT_IF_C BFu7s_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu17ll, BFu7s_L_BFu17ll)
//============================================================================


struct  BFu7s_L_BFu1c  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_L_BFu1c) C1{ Fs:7 FL Fc:1}



static void Test_BFu7s_L_BFu1c()
{
  {
    init_simple_test("BFu7s_L_BFu1c");
    static STRUCT_IF_C BFu7s_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu1c, BFu7s_L_BFu1c)
//============================================================================


struct  BFu7s_L_BFu1i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_L_BFu1i) C1{ Fs:7 FL Fi:1}



static void Test_BFu7s_L_BFu1i()
{
  {
    init_simple_test("BFu7s_L_BFu1i");
    static STRUCT_IF_C BFu7s_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu1i, BFu7s_L_BFu1i)
//============================================================================


struct  BFu7s_L_BFu1ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_L_BFu1ll) C1{ Fs:7 FL FL:1}



static void Test_BFu7s_L_BFu1ll()
{
  {
    init_simple_test("BFu7s_L_BFu1ll");
    static STRUCT_IF_C BFu7s_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu1ll, BFu7s_L_BFu1ll)
//============================================================================


struct  BFu7s_L_BFu1s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_L_BFu1s) C1{ Fs:7 FL Fs:1}



static void Test_BFu7s_L_BFu1s()
{
  {
    init_simple_test("BFu7s_L_BFu1s");
    static STRUCT_IF_C BFu7s_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu1s, BFu7s_L_BFu1s)
//============================================================================


struct  BFu7s_L_BFu31i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_L_BFu31i) C1{ Fs:7 FL Fi:31}



static void Test_BFu7s_L_BFu31i()
{
  {
    init_simple_test("BFu7s_L_BFu31i");
    static STRUCT_IF_C BFu7s_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu31i, BFu7s_L_BFu31i)
//============================================================================


struct  BFu7s_L_BFu31ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_L_BFu31ll) C1{ Fs:7 FL FL:31}



static void Test_BFu7s_L_BFu31ll()
{
  {
    init_simple_test("BFu7s_L_BFu31ll");
    static STRUCT_IF_C BFu7s_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu31ll, BFu7s_L_BFu31ll)
//============================================================================


struct  BFu7s_L_BFu32i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_L_BFu32i) C1{ Fs:7 FL Fi:32}



static void Test_BFu7s_L_BFu32i()
{
  {
    init_simple_test("BFu7s_L_BFu32i");
    static STRUCT_IF_C BFu7s_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu32i, BFu7s_L_BFu32i)
//============================================================================


struct  BFu7s_L_BFu32ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_L_BFu32ll) C1{ Fs:7 FL FL:32}



static void Test_BFu7s_L_BFu32ll()
{
  {
    init_simple_test("BFu7s_L_BFu32ll");
    static STRUCT_IF_C BFu7s_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu32ll, BFu7s_L_BFu32ll)
//============================================================================


struct  BFu7s_L_BFu33  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_L_BFu33) C1{ Fs:7 FL FL:33}



static void Test_BFu7s_L_BFu33()
{
  {
    init_simple_test("BFu7s_L_BFu33");
    static STRUCT_IF_C BFu7s_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7s_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7s_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu33, BFu7s_L_BFu33)
//============================================================================


struct  BFu7s_L_BFu7c  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_L_BFu7c) C1{ Fs:7 FL Fc:7}



static void Test_BFu7s_L_BFu7c()
{
  {
    init_simple_test("BFu7s_L_BFu7c");
    static STRUCT_IF_C BFu7s_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu7c, BFu7s_L_BFu7c)
//============================================================================


struct  BFu7s_L_BFu7i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_L_BFu7i) C1{ Fs:7 FL Fi:7}



static void Test_BFu7s_L_BFu7i()
{
  {
    init_simple_test("BFu7s_L_BFu7i");
    static STRUCT_IF_C BFu7s_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu7i, BFu7s_L_BFu7i)
//============================================================================


struct  BFu7s_L_BFu7ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_L_BFu7ll) C1{ Fs:7 FL FL:7}



static void Test_BFu7s_L_BFu7ll()
{
  {
    init_simple_test("BFu7s_L_BFu7ll");
    static STRUCT_IF_C BFu7s_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu7ll, BFu7s_L_BFu7ll)
//============================================================================


struct  BFu7s_L_BFu7s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_L_BFu7s) C1{ Fs:7 FL Fs:7}



static void Test_BFu7s_L_BFu7s()
{
  {
    init_simple_test("BFu7s_L_BFu7s");
    static STRUCT_IF_C BFu7s_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu7s, BFu7s_L_BFu7s)
//============================================================================


struct  BFu7s_L_BFu8c  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_L_BFu8c) C1{ Fs:7 FL Fc:8}



static void Test_BFu7s_L_BFu8c()
{
  {
    init_simple_test("BFu7s_L_BFu8c");
    static STRUCT_IF_C BFu7s_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu8c, BFu7s_L_BFu8c)
//============================================================================


struct  BFu7s_L_BFu8i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_L_BFu8i) C1{ Fs:7 FL Fi:8}



static void Test_BFu7s_L_BFu8i()
{
  {
    init_simple_test("BFu7s_L_BFu8i");
    static STRUCT_IF_C BFu7s_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu8i, BFu7s_L_BFu8i)
//============================================================================


struct  BFu7s_L_BFu8ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_L_BFu8ll) C1{ Fs:7 FL FL:8}



static void Test_BFu7s_L_BFu8ll()
{
  {
    init_simple_test("BFu7s_L_BFu8ll");
    static STRUCT_IF_C BFu7s_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu8ll, BFu7s_L_BFu8ll)
//============================================================================


struct  BFu7s_L_BFu8s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_L_BFu8s) C1{ Fs:7 FL Fs:8}



static void Test_BFu7s_L_BFu8s()
{
  {
    init_simple_test("BFu7s_L_BFu8s");
    static STRUCT_IF_C BFu7s_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu8s, BFu7s_L_BFu8s)
//============================================================================


struct  BFu7s_L_BFu9i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_L_BFu9i) C1{ Fs:7 FL Fi:9}



static void Test_BFu7s_L_BFu9i()
{
  {
    init_simple_test("BFu7s_L_BFu9i");
    static STRUCT_IF_C BFu7s_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu9i, BFu7s_L_BFu9i)
//============================================================================


struct  BFu7s_L_BFu9ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_L_BFu9ll) C1{ Fs:7 FL FL:9}



static void Test_BFu7s_L_BFu9ll()
{
  {
    init_simple_test("BFu7s_L_BFu9ll");
    static STRUCT_IF_C BFu7s_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu9ll, BFu7s_L_BFu9ll)
//============================================================================


struct  BFu7s_L_BFu9s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_L_BFu9s) C1{ Fs:7 FL Fs:9}



static void Test_BFu7s_L_BFu9s()
{
  {
    init_simple_test("BFu7s_L_BFu9s");
    static STRUCT_IF_C BFu7s_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_BFu9s, BFu7s_L_BFu9s)
//============================================================================


struct  BFu7s_L_C  {
  unsigned short v1:7;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu7s_L_C) C1{ Fs:7 FL Fc}



static void Test_BFu7s_L_C()
{
  {
    init_simple_test("BFu7s_L_C");
    static STRUCT_IF_C BFu7s_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_C, BFu7s_L_C)
//============================================================================


struct  BFu7s_L_D  {
  unsigned short v1:7;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu7s_L_D) C1{ Fs:7 FL[2]}



static void Test_BFu7s_L_D()
{
  {
    init_simple_test("BFu7s_L_D");
    static STRUCT_IF_C BFu7s_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_D, BFu7s_L_D)
//============================================================================


struct  BFu7s_L_F  {
  unsigned short v1:7;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu7s_L_F) C1{ Fs:7 FL Fi}



static void Test_BFu7s_L_F()
{
  {
    init_simple_test("BFu7s_L_F");
    static STRUCT_IF_C BFu7s_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_F, BFu7s_L_F)
//============================================================================


struct  BFu7s_L_I  {
  unsigned short v1:7;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu7s_L_I) C1{ Fs:7 FL Fi}



static void Test_BFu7s_L_I()
{
  {
    init_simple_test("BFu7s_L_I");
    static STRUCT_IF_C BFu7s_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_I, BFu7s_L_I)
//============================================================================


struct  BFu7s_L_Ip  {
  unsigned short v1:7;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu7s_L_Ip) C1{ Fs:7 FL Fp}



static void Test_BFu7s_L_Ip()
{
  {
    init_simple_test("BFu7s_L_Ip");
    static STRUCT_IF_C BFu7s_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Ip, BFu7s_L_Ip)
//============================================================================


struct  BFu7s_L_L  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_L_L) C1{ Fs:7 FL[2]}



static void Test_BFu7s_L_L()
{
  {
    init_simple_test("BFu7s_L_L");
    static STRUCT_IF_C BFu7s_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_L, BFu7s_L_L)
//============================================================================


struct  BFu7s_L_S  {
  unsigned short v1:7;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu7s_L_S) C1{ Fs:7 FL Fs}



static void Test_BFu7s_L_S()
{
  {
    init_simple_test("BFu7s_L_S");
    static STRUCT_IF_C BFu7s_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_S, BFu7s_L_S)
//============================================================================


struct  BFu7s_L_Uc  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu7s_L_Uc) C1{ Fs:7 FL Fc}



static void Test_BFu7s_L_Uc()
{
  {
    init_simple_test("BFu7s_L_Uc");
    static STRUCT_IF_C BFu7s_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Uc, BFu7s_L_Uc)
//============================================================================


struct  BFu7s_L_Ui  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu7s_L_Ui) C1{ Fs:7 FL Fi}



static void Test_BFu7s_L_Ui()
{
  {
    init_simple_test("BFu7s_L_Ui");
    static STRUCT_IF_C BFu7s_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Ui, BFu7s_L_Ui)
//============================================================================


struct  BFu7s_L_Ul  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_L_Ul) C1{ Fs:7 FL[2]}



static void Test_BFu7s_L_Ul()
{
  {
    init_simple_test("BFu7s_L_Ul");
    static STRUCT_IF_C BFu7s_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Ul, BFu7s_L_Ul)
//============================================================================


struct  BFu7s_L_Us  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu7s_L_Us) C1{ Fs:7 FL Fs}



static void Test_BFu7s_L_Us()
{
  {
    init_simple_test("BFu7s_L_Us");
    static STRUCT_IF_C BFu7s_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Us, BFu7s_L_Us)
//============================================================================


struct  BFu7s_L_Vp  {
  unsigned short v1:7;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu7s_L_Vp) C1{ Fs:7 FL Fp}



static void Test_BFu7s_L_Vp()
{
  {
    init_simple_test("BFu7s_L_Vp");
    static STRUCT_IF_C BFu7s_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_L_Vp, BFu7s_L_Vp)
//============================================================================


struct  BFu7s_S  {
  unsigned short v1:7;
  short v2;
};
//SIG(1 BFu7s_S) C1{ Fs:7 Fs}



static void Test_BFu7s_S()
{
  {
    init_simple_test("BFu7s_S");
    static STRUCT_IF_C BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S");
    check_field_offset(lv, v2, 2, "BFu7s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S, BFu7s_S)
//============================================================================


struct  BFu7s_S_BFu15i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_S_BFu15i) C1{ Fs:7 Fs Fi:15}



static void Test_BFu7s_S_BFu15i()
{
  {
    init_simple_test("BFu7s_S_BFu15i");
    static STRUCT_IF_C BFu7s_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu15i, BFu7s_S_BFu15i)
//============================================================================


struct  BFu7s_S_BFu15ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_S_BFu15ll) C1{ Fs:7 Fs FL:15}



static void Test_BFu7s_S_BFu15ll()
{
  {
    init_simple_test("BFu7s_S_BFu15ll");
    static STRUCT_IF_C BFu7s_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu15ll, BFu7s_S_BFu15ll)
//============================================================================


struct  BFu7s_S_BFu15s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_S_BFu15s) C1{ Fs:7 Fs Fs:15}



static void Test_BFu7s_S_BFu15s()
{
  {
    init_simple_test("BFu7s_S_BFu15s");
    static STRUCT_IF_C BFu7s_S_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu15s, BFu7s_S_BFu15s)
//============================================================================


struct  BFu7s_S_BFu16i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_S_BFu16i) C1{ Fs:7 Fs Fi:16}



static void Test_BFu7s_S_BFu16i()
{
  {
    init_simple_test("BFu7s_S_BFu16i");
    static STRUCT_IF_C BFu7s_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu16i, BFu7s_S_BFu16i)
//============================================================================


struct  BFu7s_S_BFu16ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_S_BFu16ll) C1{ Fs:7 Fs FL:16}



static void Test_BFu7s_S_BFu16ll()
{
  {
    init_simple_test("BFu7s_S_BFu16ll");
    static STRUCT_IF_C BFu7s_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu16ll, BFu7s_S_BFu16ll)
//============================================================================


struct  BFu7s_S_BFu16s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_S_BFu16s) C1{ Fs:7 Fs Fs:16}



static void Test_BFu7s_S_BFu16s()
{
  {
    init_simple_test("BFu7s_S_BFu16s");
    static STRUCT_IF_C BFu7s_S_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu16s, BFu7s_S_BFu16s)
//============================================================================


struct  BFu7s_S_BFu17i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_S_BFu17i) C1{ Fs:7 Fs Fi:17}



static void Test_BFu7s_S_BFu17i()
{
  {
    init_simple_test("BFu7s_S_BFu17i");
    static STRUCT_IF_C BFu7s_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu17i, BFu7s_S_BFu17i)
//============================================================================


struct  BFu7s_S_BFu17ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_S_BFu17ll) C1{ Fs:7 Fs FL:17}



static void Test_BFu7s_S_BFu17ll()
{
  {
    init_simple_test("BFu7s_S_BFu17ll");
    static STRUCT_IF_C BFu7s_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu17ll, BFu7s_S_BFu17ll)
//============================================================================


struct  BFu7s_S_BFu1c  {
  unsigned short v1:7;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_S_BFu1c) C1{ Fs:7 Fs Fc:1}



static void Test_BFu7s_S_BFu1c()
{
  {
    init_simple_test("BFu7s_S_BFu1c");
    static STRUCT_IF_C BFu7s_S_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu1c, BFu7s_S_BFu1c)
//============================================================================


struct  BFu7s_S_BFu1i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_S_BFu1i) C1{ Fs:7 Fs Fi:1}



static void Test_BFu7s_S_BFu1i()
{
  {
    init_simple_test("BFu7s_S_BFu1i");
    static STRUCT_IF_C BFu7s_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu1i, BFu7s_S_BFu1i)
//============================================================================


struct  BFu7s_S_BFu1ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_S_BFu1ll) C1{ Fs:7 Fs FL:1}



static void Test_BFu7s_S_BFu1ll()
{
  {
    init_simple_test("BFu7s_S_BFu1ll");
    static STRUCT_IF_C BFu7s_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu1ll, BFu7s_S_BFu1ll)
//============================================================================


struct  BFu7s_S_BFu1s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_S_BFu1s) C1{ Fs:7 Fs Fs:1}



static void Test_BFu7s_S_BFu1s()
{
  {
    init_simple_test("BFu7s_S_BFu1s");
    static STRUCT_IF_C BFu7s_S_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu1s, BFu7s_S_BFu1s)
//============================================================================


struct  BFu7s_S_BFu31i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_S_BFu31i) C1{ Fs:7 Fs Fi:31}



static void Test_BFu7s_S_BFu31i()
{
  {
    init_simple_test("BFu7s_S_BFu31i");
    static STRUCT_IF_C BFu7s_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu31i, BFu7s_S_BFu31i)
//============================================================================


struct  BFu7s_S_BFu31ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_S_BFu31ll) C1{ Fs:7 Fs FL:31}



static void Test_BFu7s_S_BFu31ll()
{
  {
    init_simple_test("BFu7s_S_BFu31ll");
    static STRUCT_IF_C BFu7s_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu31ll, BFu7s_S_BFu31ll)
//============================================================================


struct  BFu7s_S_BFu32i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_S_BFu32i) C1{ Fs:7 Fs Fi:32}



static void Test_BFu7s_S_BFu32i()
{
  {
    init_simple_test("BFu7s_S_BFu32i");
    static STRUCT_IF_C BFu7s_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu32i, BFu7s_S_BFu32i)
//============================================================================


struct  BFu7s_S_BFu32ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_S_BFu32ll) C1{ Fs:7 Fs FL:32}



static void Test_BFu7s_S_BFu32ll()
{
  {
    init_simple_test("BFu7s_S_BFu32ll");
    static STRUCT_IF_C BFu7s_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu32ll, BFu7s_S_BFu32ll)
//============================================================================


struct  BFu7s_S_BFu33  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_S_BFu33) C1{ Fs:7 Fs FL:33}



static void Test_BFu7s_S_BFu33()
{
  {
    init_simple_test("BFu7s_S_BFu33");
    static STRUCT_IF_C BFu7s_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7s_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7s_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu33, BFu7s_S_BFu33)
//============================================================================


struct  BFu7s_S_BFu7c  {
  unsigned short v1:7;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_S_BFu7c) C1{ Fs:7 Fs Fc:7}



static void Test_BFu7s_S_BFu7c()
{
  {
    init_simple_test("BFu7s_S_BFu7c");
    static STRUCT_IF_C BFu7s_S_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu7c, BFu7s_S_BFu7c)
//============================================================================


struct  BFu7s_S_BFu7i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_S_BFu7i) C1{ Fs:7 Fs Fi:7}



static void Test_BFu7s_S_BFu7i()
{
  {
    init_simple_test("BFu7s_S_BFu7i");
    static STRUCT_IF_C BFu7s_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu7i, BFu7s_S_BFu7i)
//============================================================================


struct  BFu7s_S_BFu7ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_S_BFu7ll) C1{ Fs:7 Fs FL:7}



static void Test_BFu7s_S_BFu7ll()
{
  {
    init_simple_test("BFu7s_S_BFu7ll");
    static STRUCT_IF_C BFu7s_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu7ll, BFu7s_S_BFu7ll)
//============================================================================


struct  BFu7s_S_BFu7s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_S_BFu7s) C1{ Fs:7 Fs Fs:7}



static void Test_BFu7s_S_BFu7s()
{
  {
    init_simple_test("BFu7s_S_BFu7s");
    static STRUCT_IF_C BFu7s_S_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu7s, BFu7s_S_BFu7s)
//============================================================================


struct  BFu7s_S_BFu8c  {
  unsigned short v1:7;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_S_BFu8c) C1{ Fs:7 Fs Fc:8}



static void Test_BFu7s_S_BFu8c()
{
  {
    init_simple_test("BFu7s_S_BFu8c");
    static STRUCT_IF_C BFu7s_S_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu8c, BFu7s_S_BFu8c)
//============================================================================


struct  BFu7s_S_BFu8i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_S_BFu8i) C1{ Fs:7 Fs Fi:8}



static void Test_BFu7s_S_BFu8i()
{
  {
    init_simple_test("BFu7s_S_BFu8i");
    static STRUCT_IF_C BFu7s_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu8i, BFu7s_S_BFu8i)
//============================================================================


struct  BFu7s_S_BFu8ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_S_BFu8ll) C1{ Fs:7 Fs FL:8}



static void Test_BFu7s_S_BFu8ll()
{
  {
    init_simple_test("BFu7s_S_BFu8ll");
    static STRUCT_IF_C BFu7s_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu8ll, BFu7s_S_BFu8ll)
//============================================================================


struct  BFu7s_S_BFu8s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_S_BFu8s) C1{ Fs:7 Fs Fs:8}



static void Test_BFu7s_S_BFu8s()
{
  {
    init_simple_test("BFu7s_S_BFu8s");
    static STRUCT_IF_C BFu7s_S_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu8s, BFu7s_S_BFu8s)
//============================================================================


struct  BFu7s_S_BFu9i  {
  unsigned short v1:7;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_S_BFu9i) C1{ Fs:7 Fs Fi:9}



static void Test_BFu7s_S_BFu9i()
{
  {
    init_simple_test("BFu7s_S_BFu9i");
    static STRUCT_IF_C BFu7s_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu9i, BFu7s_S_BFu9i)
//============================================================================


struct  BFu7s_S_BFu9ll  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_S_BFu9ll) C1{ Fs:7 Fs FL:9}



static void Test_BFu7s_S_BFu9ll()
{
  {
    init_simple_test("BFu7s_S_BFu9ll");
    static STRUCT_IF_C BFu7s_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu9ll, BFu7s_S_BFu9ll)
//============================================================================


struct  BFu7s_S_BFu9s  {
  unsigned short v1:7;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_S_BFu9s) C1{ Fs:7 Fs Fs:9}



static void Test_BFu7s_S_BFu9s()
{
  {
    init_simple_test("BFu7s_S_BFu9s");
    static STRUCT_IF_C BFu7s_S_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_BFu9s, BFu7s_S_BFu9s)
//============================================================================


struct  BFu7s_S_C  {
  unsigned short v1:7;
  short v2;
  char v3;
};
//SIG(1 BFu7s_S_C) C1{ Fs:7 Fs Fc}



static void Test_BFu7s_S_C()
{
  {
    init_simple_test("BFu7s_S_C");
    static STRUCT_IF_C BFu7s_S_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_C");
    check_field_offset(lv, v2, 2, "BFu7s_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_C, BFu7s_S_C)
//============================================================================


struct  BFu7s_S_D  {
  unsigned short v1:7;
  short v2;
  double v3;
};
//SIG(1 BFu7s_S_D) C1{ Fs:7 Fs FL}



static void Test_BFu7s_S_D()
{
  {
    init_simple_test("BFu7s_S_D");
    static STRUCT_IF_C BFu7s_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_D");
    check_field_offset(lv, v2, 2, "BFu7s_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_D, BFu7s_S_D)
//============================================================================


struct  BFu7s_S_F  {
  unsigned short v1:7;
  short v2;
  float v3;
};
//SIG(1 BFu7s_S_F) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_S_F()
{
  {
    init_simple_test("BFu7s_S_F");
    static STRUCT_IF_C BFu7s_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_F");
    check_field_offset(lv, v2, 2, "BFu7s_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_F, BFu7s_S_F)
//============================================================================


struct  BFu7s_S_I  {
  unsigned short v1:7;
  short v2;
  int v3;
};
//SIG(1 BFu7s_S_I) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_S_I()
{
  {
    init_simple_test("BFu7s_S_I");
    static STRUCT_IF_C BFu7s_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_I");
    check_field_offset(lv, v2, 2, "BFu7s_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_I, BFu7s_S_I)
//============================================================================


struct  BFu7s_S_Ip  {
  unsigned short v1:7;
  short v2;
  int *v3;
};
//SIG(1 BFu7s_S_Ip) C1{ Fs:7 Fs Fp}



static void Test_BFu7s_S_Ip()
{
  {
    init_simple_test("BFu7s_S_Ip");
    static STRUCT_IF_C BFu7s_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Ip");
    check_field_offset(lv, v2, 2, "BFu7s_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Ip, BFu7s_S_Ip)
//============================================================================


struct  BFu7s_S_L  {
  unsigned short v1:7;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_S_L) C1{ Fs:7 Fs FL}



static void Test_BFu7s_S_L()
{
  {
    init_simple_test("BFu7s_S_L");
    static STRUCT_IF_C BFu7s_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_L");
    check_field_offset(lv, v2, 2, "BFu7s_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_L, BFu7s_S_L)
//============================================================================


struct  BFu7s_S_S  {
  unsigned short v1:7;
  short v2;
  short v3;
};
//SIG(1 BFu7s_S_S) C1{ Fs:7 Fs[2]}



static void Test_BFu7s_S_S()
{
  {
    init_simple_test("BFu7s_S_S");
    static STRUCT_IF_C BFu7s_S_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_S");
    check_field_offset(lv, v2, 2, "BFu7s_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_S, BFu7s_S_S)
//============================================================================


struct  BFu7s_S_Uc  {
  unsigned short v1:7;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu7s_S_Uc) C1{ Fs:7 Fs Fc}



static void Test_BFu7s_S_Uc()
{
  {
    init_simple_test("BFu7s_S_Uc");
    static STRUCT_IF_C BFu7s_S_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Uc");
    check_field_offset(lv, v2, 2, "BFu7s_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Uc, BFu7s_S_Uc)
//============================================================================


struct  BFu7s_S_Ui  {
  unsigned short v1:7;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu7s_S_Ui) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_S_Ui()
{
  {
    init_simple_test("BFu7s_S_Ui");
    static STRUCT_IF_C BFu7s_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Ui");
    check_field_offset(lv, v2, 2, "BFu7s_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Ui, BFu7s_S_Ui)
//============================================================================


struct  BFu7s_S_Ul  {
  unsigned short v1:7;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_S_Ul) C1{ Fs:7 Fs FL}



static void Test_BFu7s_S_Ul()
{
  {
    init_simple_test("BFu7s_S_Ul");
    static STRUCT_IF_C BFu7s_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Ul");
    check_field_offset(lv, v2, 2, "BFu7s_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Ul, BFu7s_S_Ul)
//============================================================================


struct  BFu7s_S_Us  {
  unsigned short v1:7;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu7s_S_Us) C1{ Fs:7 Fs[2]}



static void Test_BFu7s_S_Us()
{
  {
    init_simple_test("BFu7s_S_Us");
    static STRUCT_IF_C BFu7s_S_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Us");
    check_field_offset(lv, v2, 2, "BFu7s_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7s_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Us, BFu7s_S_Us)
//============================================================================


struct  BFu7s_S_Vp  {
  unsigned short v1:7;
  short v2;
  void *v3;
};
//SIG(1 BFu7s_S_Vp) C1{ Fs:7 Fs Fp}



static void Test_BFu7s_S_Vp()
{
  {
    init_simple_test("BFu7s_S_Vp");
    static STRUCT_IF_C BFu7s_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_Vp");
    check_field_offset(lv, v2, 2, "BFu7s_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_S_Vp, BFu7s_S_Vp)
//============================================================================


struct  BFu7s_Uc  {
  unsigned short v1:7;
  unsigned char v2;
};
//SIG(1 BFu7s_Uc) C1{ Fs:7 Fc}



static void Test_BFu7s_Uc()
{
  {
    init_simple_test("BFu7s_Uc");
    static STRUCT_IF_C BFu7s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc");
    check_field_offset(lv, v2, 1, "BFu7s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc, BFu7s_Uc)
//============================================================================


struct  BFu7s_Uc_BFu15i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Uc_BFu15i) C1{ Fs:7 Fc Fi:15}



static void Test_BFu7s_Uc_BFu15i()
{
  {
    init_simple_test("BFu7s_Uc_BFu15i");
    static STRUCT_IF_C BFu7s_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu15i, BFu7s_Uc_BFu15i)
//============================================================================


struct  BFu7s_Uc_BFu15ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Uc_BFu15ll) C1{ Fs:7 Fc FL:15}



static void Test_BFu7s_Uc_BFu15ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu15ll");
    static STRUCT_IF_C BFu7s_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu15ll, BFu7s_Uc_BFu15ll)
//============================================================================


struct  BFu7s_Uc_BFu15s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Uc_BFu15s) C1{ Fs:7 Fc Fs:15}



static void Test_BFu7s_Uc_BFu15s()
{
  {
    init_simple_test("BFu7s_Uc_BFu15s");
    static STRUCT_IF_C BFu7s_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7s_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu15s, BFu7s_Uc_BFu15s)
//============================================================================


struct  BFu7s_Uc_BFu16i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Uc_BFu16i) C1{ Fs:7 Fc Fi:16}



static void Test_BFu7s_Uc_BFu16i()
{
  {
    init_simple_test("BFu7s_Uc_BFu16i");
    static STRUCT_IF_C BFu7s_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu16i, BFu7s_Uc_BFu16i)
//============================================================================


struct  BFu7s_Uc_BFu16ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Uc_BFu16ll) C1{ Fs:7 Fc FL:16}



static void Test_BFu7s_Uc_BFu16ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu16ll");
    static STRUCT_IF_C BFu7s_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu16ll, BFu7s_Uc_BFu16ll)
//============================================================================


struct  BFu7s_Uc_BFu16s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Uc_BFu16s) C1{ Fs:7 Fc Fs:16}



static void Test_BFu7s_Uc_BFu16s()
{
  {
    init_simple_test("BFu7s_Uc_BFu16s");
    static STRUCT_IF_C BFu7s_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7s_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu16s, BFu7s_Uc_BFu16s)
//============================================================================


struct  BFu7s_Uc_BFu17i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Uc_BFu17i) C1{ Fs:7 Fc Fi:17}



static void Test_BFu7s_Uc_BFu17i()
{
  {
    init_simple_test("BFu7s_Uc_BFu17i");
    static STRUCT_IF_C BFu7s_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu17i, BFu7s_Uc_BFu17i)
//============================================================================


struct  BFu7s_Uc_BFu17ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Uc_BFu17ll) C1{ Fs:7 Fc FL:17}



static void Test_BFu7s_Uc_BFu17ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu17ll");
    static STRUCT_IF_C BFu7s_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7s_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu17ll, BFu7s_Uc_BFu17ll)
//============================================================================


struct  BFu7s_Uc_BFu1c  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Uc_BFu1c) C1{ Fs:7 Fc Fc:1}



static void Test_BFu7s_Uc_BFu1c()
{
  {
    init_simple_test("BFu7s_Uc_BFu1c");
    static STRUCT_IF_C BFu7s_Uc_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu1c, BFu7s_Uc_BFu1c)
//============================================================================


struct  BFu7s_Uc_BFu1i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Uc_BFu1i) C1{ Fs:7 Fc Fi:1}



static void Test_BFu7s_Uc_BFu1i()
{
  {
    init_simple_test("BFu7s_Uc_BFu1i");
    static STRUCT_IF_C BFu7s_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu1i, BFu7s_Uc_BFu1i)
//============================================================================


struct  BFu7s_Uc_BFu1ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Uc_BFu1ll) C1{ Fs:7 Fc FL:1}



static void Test_BFu7s_Uc_BFu1ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu1ll");
    static STRUCT_IF_C BFu7s_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu1ll, BFu7s_Uc_BFu1ll)
//============================================================================


struct  BFu7s_Uc_BFu1s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Uc_BFu1s) C1{ Fs:7 Fc Fs:1}



static void Test_BFu7s_Uc_BFu1s()
{
  {
    init_simple_test("BFu7s_Uc_BFu1s");
    static STRUCT_IF_C BFu7s_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7s_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu1s, BFu7s_Uc_BFu1s)
//============================================================================


struct  BFu7s_Uc_BFu31i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Uc_BFu31i) C1{ Fs:7 Fc Fi:31}



static void Test_BFu7s_Uc_BFu31i()
{
  {
    init_simple_test("BFu7s_Uc_BFu31i");
    static STRUCT_IF_C BFu7s_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu31i, BFu7s_Uc_BFu31i)
//============================================================================


struct  BFu7s_Uc_BFu31ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Uc_BFu31ll) C1{ Fs:7 Fc FL:31}



static void Test_BFu7s_Uc_BFu31ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu31ll");
    static STRUCT_IF_C BFu7s_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7s_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu31ll, BFu7s_Uc_BFu31ll)
//============================================================================


struct  BFu7s_Uc_BFu32i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Uc_BFu32i) C1{ Fs:7 Fc Fi:32}



static void Test_BFu7s_Uc_BFu32i()
{
  {
    init_simple_test("BFu7s_Uc_BFu32i");
    static STRUCT_IF_C BFu7s_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu32i, BFu7s_Uc_BFu32i)
//============================================================================


struct  BFu7s_Uc_BFu32ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Uc_BFu32ll) C1{ Fs:7 Fc FL:32}



static void Test_BFu7s_Uc_BFu32ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu32ll");
    static STRUCT_IF_C BFu7s_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7s_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu32ll, BFu7s_Uc_BFu32ll)
//============================================================================


struct  BFu7s_Uc_BFu33  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Uc_BFu33) C1{ Fs:7 Fc FL:33}



static void Test_BFu7s_Uc_BFu33()
{
  {
    init_simple_test("BFu7s_Uc_BFu33");
    static STRUCT_IF_C BFu7s_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu33");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7s_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu33, BFu7s_Uc_BFu33)
//============================================================================


struct  BFu7s_Uc_BFu7c  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Uc_BFu7c) C1{ Fs:7 Fc Fc:7}



static void Test_BFu7s_Uc_BFu7c()
{
  {
    init_simple_test("BFu7s_Uc_BFu7c");
    static STRUCT_IF_C BFu7s_Uc_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu7c, BFu7s_Uc_BFu7c)
//============================================================================


struct  BFu7s_Uc_BFu7i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Uc_BFu7i) C1{ Fs:7 Fc Fi:7}



static void Test_BFu7s_Uc_BFu7i()
{
  {
    init_simple_test("BFu7s_Uc_BFu7i");
    static STRUCT_IF_C BFu7s_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu7i, BFu7s_Uc_BFu7i)
//============================================================================


struct  BFu7s_Uc_BFu7ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Uc_BFu7ll) C1{ Fs:7 Fc FL:7}



static void Test_BFu7s_Uc_BFu7ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu7ll");
    static STRUCT_IF_C BFu7s_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu7ll, BFu7s_Uc_BFu7ll)
//============================================================================


struct  BFu7s_Uc_BFu7s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Uc_BFu7s) C1{ Fs:7 Fc Fs:7}



static void Test_BFu7s_Uc_BFu7s()
{
  {
    init_simple_test("BFu7s_Uc_BFu7s");
    static STRUCT_IF_C BFu7s_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7s_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu7s, BFu7s_Uc_BFu7s)
//============================================================================


struct  BFu7s_Uc_BFu8c  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Uc_BFu8c) C1{ Fs:7 Fc Fc:8}



static void Test_BFu7s_Uc_BFu8c()
{
  {
    init_simple_test("BFu7s_Uc_BFu8c");
    static STRUCT_IF_C BFu7s_Uc_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu8c, BFu7s_Uc_BFu8c)
//============================================================================


struct  BFu7s_Uc_BFu8i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Uc_BFu8i) C1{ Fs:7 Fc Fi:8}



static void Test_BFu7s_Uc_BFu8i()
{
  {
    init_simple_test("BFu7s_Uc_BFu8i");
    static STRUCT_IF_C BFu7s_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu8i, BFu7s_Uc_BFu8i)
//============================================================================


struct  BFu7s_Uc_BFu8ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Uc_BFu8ll) C1{ Fs:7 Fc FL:8}



static void Test_BFu7s_Uc_BFu8ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu8ll");
    static STRUCT_IF_C BFu7s_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu8ll, BFu7s_Uc_BFu8ll)
//============================================================================


struct  BFu7s_Uc_BFu8s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Uc_BFu8s) C1{ Fs:7 Fc Fs:8}



static void Test_BFu7s_Uc_BFu8s()
{
  {
    init_simple_test("BFu7s_Uc_BFu8s");
    static STRUCT_IF_C BFu7s_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7s_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu8s, BFu7s_Uc_BFu8s)
//============================================================================


struct  BFu7s_Uc_BFu9i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Uc_BFu9i) C1{ Fs:7 Fc Fi:9}



static void Test_BFu7s_Uc_BFu9i()
{
  {
    init_simple_test("BFu7s_Uc_BFu9i");
    static STRUCT_IF_C BFu7s_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu9i, BFu7s_Uc_BFu9i)
//============================================================================


struct  BFu7s_Uc_BFu9ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Uc_BFu9ll) C1{ Fs:7 Fc FL:9}



static void Test_BFu7s_Uc_BFu9ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu9ll");
    static STRUCT_IF_C BFu7s_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu9ll, BFu7s_Uc_BFu9ll)
//============================================================================


struct  BFu7s_Uc_BFu9s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Uc_BFu9s) C1{ Fs:7 Fc Fs:9}



static void Test_BFu7s_Uc_BFu9s()
{
  {
    init_simple_test("BFu7s_Uc_BFu9s");
    static STRUCT_IF_C BFu7s_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7s_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_BFu9s, BFu7s_Uc_BFu9s)
//============================================================================


struct  BFu7s_Uc_C  {
  unsigned short v1:7;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu7s_Uc_C) C1{ Fs:7 Fc[2]}



static void Test_BFu7s_Uc_C()
{
  {
    init_simple_test("BFu7s_Uc_C");
    static STRUCT_IF_C BFu7s_Uc_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_C");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_C.v2");
    check_field_offset(lv, v3, 2, "BFu7s_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_C, BFu7s_Uc_C)
//============================================================================


struct  BFu7s_Uc_D  {
  unsigned short v1:7;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu7s_Uc_D) C1{ Fs:7 Fc FL}



static void Test_BFu7s_Uc_D()
{
  {
    init_simple_test("BFu7s_Uc_D");
    static STRUCT_IF_C BFu7s_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_D");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_D, BFu7s_Uc_D)
//============================================================================


struct  BFu7s_Uc_F  {
  unsigned short v1:7;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu7s_Uc_F) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_Uc_F()
{
  {
    init_simple_test("BFu7s_Uc_F");
    static STRUCT_IF_C BFu7s_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_F");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_F, BFu7s_Uc_F)
//============================================================================


struct  BFu7s_Uc_I  {
  unsigned short v1:7;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu7s_Uc_I) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_Uc_I()
{
  {
    init_simple_test("BFu7s_Uc_I");
    static STRUCT_IF_C BFu7s_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_I");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_I, BFu7s_Uc_I)
//============================================================================


struct  BFu7s_Uc_Ip  {
  unsigned short v1:7;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu7s_Uc_Ip) C1{ Fs:7 Fc Fp}



static void Test_BFu7s_Uc_Ip()
{
  {
    init_simple_test("BFu7s_Uc_Ip");
    static STRUCT_IF_C BFu7s_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Ip");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Ip, BFu7s_Uc_Ip)
//============================================================================


struct  BFu7s_Uc_L  {
  unsigned short v1:7;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Uc_L) C1{ Fs:7 Fc FL}



static void Test_BFu7s_Uc_L()
{
  {
    init_simple_test("BFu7s_Uc_L");
    static STRUCT_IF_C BFu7s_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_L");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_L, BFu7s_Uc_L)
//============================================================================


struct  BFu7s_Uc_S  {
  unsigned short v1:7;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu7s_Uc_S) C1{ Fs:7 Fc Fs}



static void Test_BFu7s_Uc_S()
{
  {
    init_simple_test("BFu7s_Uc_S");
    static STRUCT_IF_C BFu7s_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_S");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_S.v2");
    check_field_offset(lv, v3, 2, "BFu7s_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_S, BFu7s_Uc_S)
//============================================================================


struct  BFu7s_Uc_Uc  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Uc_Uc) C1{ Fs:7 Fc[2]}



static void Test_BFu7s_Uc_Uc()
{
  {
    init_simple_test("BFu7s_Uc_Uc");
    static STRUCT_IF_C BFu7s_Uc_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Uc");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7s_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Uc, BFu7s_Uc_Uc)
//============================================================================


struct  BFu7s_Uc_Ui  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Uc_Ui) C1{ Fs:7 Fc Fi}



static void Test_BFu7s_Uc_Ui()
{
  {
    init_simple_test("BFu7s_Uc_Ui");
    static STRUCT_IF_C BFu7s_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Ui");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Ui, BFu7s_Uc_Ui)
//============================================================================


struct  BFu7s_Uc_Ul  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Uc_Ul) C1{ Fs:7 Fc FL}



static void Test_BFu7s_Uc_Ul()
{
  {
    init_simple_test("BFu7s_Uc_Ul");
    static STRUCT_IF_C BFu7s_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Ul");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Ul, BFu7s_Uc_Ul)
//============================================================================


struct  BFu7s_Uc_Us  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Uc_Us) C1{ Fs:7 Fc Fs}



static void Test_BFu7s_Uc_Us()
{
  {
    init_simple_test("BFu7s_Uc_Us");
    static STRUCT_IF_C BFu7s_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Us");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7s_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Us, BFu7s_Uc_Us)
//============================================================================


struct  BFu7s_Uc_Vp  {
  unsigned short v1:7;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu7s_Uc_Vp) C1{ Fs:7 Fc Fp}



static void Test_BFu7s_Uc_Vp()
{
  {
    init_simple_test("BFu7s_Uc_Vp");
    static STRUCT_IF_C BFu7s_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_Vp");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Uc_Vp, BFu7s_Uc_Vp)
//============================================================================


struct  BFu7s_Ui  {
  unsigned short v1:7;
  unsigned int v2;
};
//SIG(1 BFu7s_Ui) C1{ Fs:7 Fi}



static void Test_BFu7s_Ui()
{
  {
    init_simple_test("BFu7s_Ui");
    static STRUCT_IF_C BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui, BFu7s_Ui)
//============================================================================


struct  BFu7s_Ui_BFu15i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Ui_BFu15i) C1{ Fs:7 Fi Fi:15}



static void Test_BFu7s_Ui_BFu15i()
{
  {
    init_simple_test("BFu7s_Ui_BFu15i");
    static STRUCT_IF_C BFu7s_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu15i, BFu7s_Ui_BFu15i)
//============================================================================


struct  BFu7s_Ui_BFu15ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Ui_BFu15ll) C1{ Fs:7 Fi FL:15}



static void Test_BFu7s_Ui_BFu15ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu15ll");
    static STRUCT_IF_C BFu7s_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu15ll, BFu7s_Ui_BFu15ll)
//============================================================================


struct  BFu7s_Ui_BFu15s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Ui_BFu15s) C1{ Fs:7 Fi Fs:15}



static void Test_BFu7s_Ui_BFu15s()
{
  {
    init_simple_test("BFu7s_Ui_BFu15s");
    static STRUCT_IF_C BFu7s_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7s_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7s_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu15s, BFu7s_Ui_BFu15s)
//============================================================================


struct  BFu7s_Ui_BFu16i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Ui_BFu16i) C1{ Fs:7 Fi Fi:16}



static void Test_BFu7s_Ui_BFu16i()
{
  {
    init_simple_test("BFu7s_Ui_BFu16i");
    static STRUCT_IF_C BFu7s_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu16i, BFu7s_Ui_BFu16i)
//============================================================================


struct  BFu7s_Ui_BFu16ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Ui_BFu16ll) C1{ Fs:7 Fi FL:16}



static void Test_BFu7s_Ui_BFu16ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu16ll");
    static STRUCT_IF_C BFu7s_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu16ll, BFu7s_Ui_BFu16ll)
//============================================================================


struct  BFu7s_Ui_BFu16s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Ui_BFu16s) C1{ Fs:7 Fi Fs:16}



static void Test_BFu7s_Ui_BFu16s()
{
  {
    init_simple_test("BFu7s_Ui_BFu16s");
    static STRUCT_IF_C BFu7s_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7s_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7s_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu16s, BFu7s_Ui_BFu16s)
//============================================================================


struct  BFu7s_Ui_BFu17i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Ui_BFu17i) C1{ Fs:7 Fi Fi:17}



static void Test_BFu7s_Ui_BFu17i()
{
  {
    init_simple_test("BFu7s_Ui_BFu17i");
    static STRUCT_IF_C BFu7s_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu17i, BFu7s_Ui_BFu17i)
//============================================================================


struct  BFu7s_Ui_BFu17ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Ui_BFu17ll) C1{ Fs:7 Fi FL:17}



static void Test_BFu7s_Ui_BFu17ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu17ll");
    static STRUCT_IF_C BFu7s_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7s_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7s_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu17ll, BFu7s_Ui_BFu17ll)
//============================================================================


struct  BFu7s_Ui_BFu1c  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Ui_BFu1c) C1{ Fs:7 Fi Fc:1}



static void Test_BFu7s_Ui_BFu1c()
{
  {
    init_simple_test("BFu7s_Ui_BFu1c");
    static STRUCT_IF_C BFu7s_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu1c, BFu7s_Ui_BFu1c)
//============================================================================


struct  BFu7s_Ui_BFu1i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Ui_BFu1i) C1{ Fs:7 Fi Fi:1}



static void Test_BFu7s_Ui_BFu1i()
{
  {
    init_simple_test("BFu7s_Ui_BFu1i");
    static STRUCT_IF_C BFu7s_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu1i, BFu7s_Ui_BFu1i)
//============================================================================


struct  BFu7s_Ui_BFu1ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Ui_BFu1ll) C1{ Fs:7 Fi FL:1}



static void Test_BFu7s_Ui_BFu1ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu1ll");
    static STRUCT_IF_C BFu7s_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu1ll, BFu7s_Ui_BFu1ll)
//============================================================================


struct  BFu7s_Ui_BFu1s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Ui_BFu1s) C1{ Fs:7 Fi Fs:1}



static void Test_BFu7s_Ui_BFu1s()
{
  {
    init_simple_test("BFu7s_Ui_BFu1s");
    static STRUCT_IF_C BFu7s_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7s_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu1s, BFu7s_Ui_BFu1s)
//============================================================================


struct  BFu7s_Ui_BFu31i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Ui_BFu31i) C1{ Fs:7 Fi Fi:31}



static void Test_BFu7s_Ui_BFu31i()
{
  {
    init_simple_test("BFu7s_Ui_BFu31i");
    static STRUCT_IF_C BFu7s_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu31i, BFu7s_Ui_BFu31i)
//============================================================================


struct  BFu7s_Ui_BFu31ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Ui_BFu31ll) C1{ Fs:7 Fi FL:31}



static void Test_BFu7s_Ui_BFu31ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu31ll");
    static STRUCT_IF_C BFu7s_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7s_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7s_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu31ll, BFu7s_Ui_BFu31ll)
//============================================================================


struct  BFu7s_Ui_BFu32i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Ui_BFu32i) C1{ Fs:7 Fi Fi:32}



static void Test_BFu7s_Ui_BFu32i()
{
  {
    init_simple_test("BFu7s_Ui_BFu32i");
    static STRUCT_IF_C BFu7s_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu32i, BFu7s_Ui_BFu32i)
//============================================================================


struct  BFu7s_Ui_BFu32ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Ui_BFu32ll) C1{ Fs:7 Fi FL:32}



static void Test_BFu7s_Ui_BFu32ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu32ll");
    static STRUCT_IF_C BFu7s_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7s_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7s_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu32ll, BFu7s_Ui_BFu32ll)
//============================================================================


struct  BFu7s_Ui_BFu33  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Ui_BFu33) C1{ Fs:7 Fi FL:33}



static void Test_BFu7s_Ui_BFu33()
{
  {
    init_simple_test("BFu7s_Ui_BFu33");
    static STRUCT_IF_C BFu7s_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7s_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7s_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu33, BFu7s_Ui_BFu33)
//============================================================================


struct  BFu7s_Ui_BFu7c  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Ui_BFu7c) C1{ Fs:7 Fi Fc:7}



static void Test_BFu7s_Ui_BFu7c()
{
  {
    init_simple_test("BFu7s_Ui_BFu7c");
    static STRUCT_IF_C BFu7s_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu7c, BFu7s_Ui_BFu7c)
//============================================================================


struct  BFu7s_Ui_BFu7i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Ui_BFu7i) C1{ Fs:7 Fi Fi:7}



static void Test_BFu7s_Ui_BFu7i()
{
  {
    init_simple_test("BFu7s_Ui_BFu7i");
    static STRUCT_IF_C BFu7s_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu7i, BFu7s_Ui_BFu7i)
//============================================================================


struct  BFu7s_Ui_BFu7ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Ui_BFu7ll) C1{ Fs:7 Fi FL:7}



static void Test_BFu7s_Ui_BFu7ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu7ll");
    static STRUCT_IF_C BFu7s_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu7ll, BFu7s_Ui_BFu7ll)
//============================================================================


struct  BFu7s_Ui_BFu7s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Ui_BFu7s) C1{ Fs:7 Fi Fs:7}



static void Test_BFu7s_Ui_BFu7s()
{
  {
    init_simple_test("BFu7s_Ui_BFu7s");
    static STRUCT_IF_C BFu7s_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7s_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu7s, BFu7s_Ui_BFu7s)
//============================================================================


struct  BFu7s_Ui_BFu8c  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Ui_BFu8c) C1{ Fs:7 Fi Fc:8}



static void Test_BFu7s_Ui_BFu8c()
{
  {
    init_simple_test("BFu7s_Ui_BFu8c");
    static STRUCT_IF_C BFu7s_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu8c, BFu7s_Ui_BFu8c)
//============================================================================


struct  BFu7s_Ui_BFu8i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Ui_BFu8i) C1{ Fs:7 Fi Fi:8}



static void Test_BFu7s_Ui_BFu8i()
{
  {
    init_simple_test("BFu7s_Ui_BFu8i");
    static STRUCT_IF_C BFu7s_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu8i, BFu7s_Ui_BFu8i)
//============================================================================


struct  BFu7s_Ui_BFu8ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Ui_BFu8ll) C1{ Fs:7 Fi FL:8}



static void Test_BFu7s_Ui_BFu8ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu8ll");
    static STRUCT_IF_C BFu7s_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu8ll, BFu7s_Ui_BFu8ll)
//============================================================================


struct  BFu7s_Ui_BFu8s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Ui_BFu8s) C1{ Fs:7 Fi Fs:8}



static void Test_BFu7s_Ui_BFu8s()
{
  {
    init_simple_test("BFu7s_Ui_BFu8s");
    static STRUCT_IF_C BFu7s_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7s_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7s_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu8s, BFu7s_Ui_BFu8s)
//============================================================================


struct  BFu7s_Ui_BFu9i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Ui_BFu9i) C1{ Fs:7 Fi Fi:9}



static void Test_BFu7s_Ui_BFu9i()
{
  {
    init_simple_test("BFu7s_Ui_BFu9i");
    static STRUCT_IF_C BFu7s_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu9i, BFu7s_Ui_BFu9i)
//============================================================================


struct  BFu7s_Ui_BFu9ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Ui_BFu9ll) C1{ Fs:7 Fi FL:9}



static void Test_BFu7s_Ui_BFu9ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu9ll");
    static STRUCT_IF_C BFu7s_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu9ll, BFu7s_Ui_BFu9ll)
//============================================================================


struct  BFu7s_Ui_BFu9s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Ui_BFu9s) C1{ Fs:7 Fi Fs:9}



static void Test_BFu7s_Ui_BFu9s()
{
  {
    init_simple_test("BFu7s_Ui_BFu9s");
    static STRUCT_IF_C BFu7s_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7s_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7s_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_BFu9s, BFu7s_Ui_BFu9s)
//============================================================================


struct  BFu7s_Ui_C  {
  unsigned short v1:7;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu7s_Ui_C) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_Ui_C()
{
  {
    init_simple_test("BFu7s_Ui_C");
    static STRUCT_IF_C BFu7s_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_C");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_C, BFu7s_Ui_C)
//============================================================================


struct  BFu7s_Ui_D  {
  unsigned short v1:7;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu7s_Ui_D) C1{ Fs:7 Fi FL}



static void Test_BFu7s_Ui_D()
{
  {
    init_simple_test("BFu7s_Ui_D");
    static STRUCT_IF_C BFu7s_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_D");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_D, BFu7s_Ui_D)
//============================================================================


struct  BFu7s_Ui_F  {
  unsigned short v1:7;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu7s_Ui_F) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_Ui_F()
{
  {
    init_simple_test("BFu7s_Ui_F");
    static STRUCT_IF_C BFu7s_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_F");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_F, BFu7s_Ui_F)
//============================================================================


struct  BFu7s_Ui_I  {
  unsigned short v1:7;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu7s_Ui_I) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_Ui_I()
{
  {
    init_simple_test("BFu7s_Ui_I");
    static STRUCT_IF_C BFu7s_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_I");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_I, BFu7s_Ui_I)
//============================================================================


struct  BFu7s_Ui_Ip  {
  unsigned short v1:7;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu7s_Ui_Ip) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_Ui_Ip()
{
  {
    init_simple_test("BFu7s_Ui_Ip");
    static STRUCT_IF_C BFu7s_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Ip, BFu7s_Ui_Ip)
//============================================================================


struct  BFu7s_Ui_L  {
  unsigned short v1:7;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Ui_L) C1{ Fs:7 Fi FL}



static void Test_BFu7s_Ui_L()
{
  {
    init_simple_test("BFu7s_Ui_L");
    static STRUCT_IF_C BFu7s_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_L");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_L, BFu7s_Ui_L)
//============================================================================


struct  BFu7s_Ui_S  {
  unsigned short v1:7;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu7s_Ui_S) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_Ui_S()
{
  {
    init_simple_test("BFu7s_Ui_S");
    static STRUCT_IF_C BFu7s_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_S");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_S, BFu7s_Ui_S)
//============================================================================


struct  BFu7s_Ui_Uc  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Ui_Uc) C1{ Fs:7 Fi Fc}



static void Test_BFu7s_Ui_Uc()
{
  {
    init_simple_test("BFu7s_Ui_Uc");
    static STRUCT_IF_C BFu7s_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Uc, BFu7s_Ui_Uc)
//============================================================================


struct  BFu7s_Ui_Ui  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Ui_Ui) C1{ Fs:7 Fi[2]}



static void Test_BFu7s_Ui_Ui()
{
  {
    init_simple_test("BFu7s_Ui_Ui");
    static STRUCT_IF_C BFu7s_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Ui, BFu7s_Ui_Ui)
//============================================================================


struct  BFu7s_Ui_Ul  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Ui_Ul) C1{ Fs:7 Fi FL}



static void Test_BFu7s_Ui_Ul()
{
  {
    init_simple_test("BFu7s_Ui_Ul");
    static STRUCT_IF_C BFu7s_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7s_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Ul, BFu7s_Ui_Ul)
//============================================================================


struct  BFu7s_Ui_Us  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Ui_Us) C1{ Fs:7 Fi Fs}



static void Test_BFu7s_Ui_Us()
{
  {
    init_simple_test("BFu7s_Ui_Us");
    static STRUCT_IF_C BFu7s_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7s_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Us, BFu7s_Ui_Us)
//============================================================================


struct  BFu7s_Ui_Vp  {
  unsigned short v1:7;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu7s_Ui_Vp) C1{ Fs:7 Fi Fp}



static void Test_BFu7s_Ui_Vp()
{
  {
    init_simple_test("BFu7s_Ui_Vp");
    static STRUCT_IF_C BFu7s_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7s_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ui_Vp, BFu7s_Ui_Vp)
//============================================================================


struct  BFu7s_Ul  {
  unsigned short v1:7;
  __tsu64 v2;
};
//SIG(1 BFu7s_Ul) C1{ Fs:7 FL}



static void Test_BFu7s_Ul()
{
  {
    init_simple_test("BFu7s_Ul");
    static STRUCT_IF_C BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul, BFu7s_Ul)
//============================================================================


struct  BFu7s_Ul_BFu15i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Ul_BFu15i) C1{ Fs:7 FL Fi:15}



static void Test_BFu7s_Ul_BFu15i()
{
  {
    init_simple_test("BFu7s_Ul_BFu15i");
    static STRUCT_IF_C BFu7s_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu15i, BFu7s_Ul_BFu15i)
//============================================================================


struct  BFu7s_Ul_BFu15ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Ul_BFu15ll) C1{ Fs:7 FL FL:15}



static void Test_BFu7s_Ul_BFu15ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu15ll");
    static STRUCT_IF_C BFu7s_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu15ll, BFu7s_Ul_BFu15ll)
//============================================================================


struct  BFu7s_Ul_BFu15s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Ul_BFu15s) C1{ Fs:7 FL Fs:15}



static void Test_BFu7s_Ul_BFu15s()
{
  {
    init_simple_test("BFu7s_Ul_BFu15s");
    static STRUCT_IF_C BFu7s_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7s_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7s_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu15s, BFu7s_Ul_BFu15s)
//============================================================================


struct  BFu7s_Ul_BFu16i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Ul_BFu16i) C1{ Fs:7 FL Fi:16}



static void Test_BFu7s_Ul_BFu16i()
{
  {
    init_simple_test("BFu7s_Ul_BFu16i");
    static STRUCT_IF_C BFu7s_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu16i, BFu7s_Ul_BFu16i)
//============================================================================


struct  BFu7s_Ul_BFu16ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Ul_BFu16ll) C1{ Fs:7 FL FL:16}



static void Test_BFu7s_Ul_BFu16ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu16ll");
    static STRUCT_IF_C BFu7s_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu16ll, BFu7s_Ul_BFu16ll)
//============================================================================


struct  BFu7s_Ul_BFu16s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Ul_BFu16s) C1{ Fs:7 FL Fs:16}



static void Test_BFu7s_Ul_BFu16s()
{
  {
    init_simple_test("BFu7s_Ul_BFu16s");
    static STRUCT_IF_C BFu7s_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7s_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7s_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu16s, BFu7s_Ul_BFu16s)
//============================================================================


struct  BFu7s_Ul_BFu17i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Ul_BFu17i) C1{ Fs:7 FL Fi:17}



static void Test_BFu7s_Ul_BFu17i()
{
  {
    init_simple_test("BFu7s_Ul_BFu17i");
    static STRUCT_IF_C BFu7s_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu17i, BFu7s_Ul_BFu17i)
//============================================================================


struct  BFu7s_Ul_BFu17ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Ul_BFu17ll) C1{ Fs:7 FL FL:17}



static void Test_BFu7s_Ul_BFu17ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu17ll");
    static STRUCT_IF_C BFu7s_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7s_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7s_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu17ll, BFu7s_Ul_BFu17ll)
//============================================================================


struct  BFu7s_Ul_BFu1c  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Ul_BFu1c) C1{ Fs:7 FL Fc:1}



static void Test_BFu7s_Ul_BFu1c()
{
  {
    init_simple_test("BFu7s_Ul_BFu1c");
    static STRUCT_IF_C BFu7s_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu1c, BFu7s_Ul_BFu1c)
//============================================================================


struct  BFu7s_Ul_BFu1i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Ul_BFu1i) C1{ Fs:7 FL Fi:1}



static void Test_BFu7s_Ul_BFu1i()
{
  {
    init_simple_test("BFu7s_Ul_BFu1i");
    static STRUCT_IF_C BFu7s_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu1i, BFu7s_Ul_BFu1i)
//============================================================================


struct  BFu7s_Ul_BFu1ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Ul_BFu1ll) C1{ Fs:7 FL FL:1}



static void Test_BFu7s_Ul_BFu1ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu1ll");
    static STRUCT_IF_C BFu7s_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu1ll, BFu7s_Ul_BFu1ll)
//============================================================================


struct  BFu7s_Ul_BFu1s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Ul_BFu1s) C1{ Fs:7 FL Fs:1}



static void Test_BFu7s_Ul_BFu1s()
{
  {
    init_simple_test("BFu7s_Ul_BFu1s");
    static STRUCT_IF_C BFu7s_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7s_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu1s, BFu7s_Ul_BFu1s)
//============================================================================


struct  BFu7s_Ul_BFu31i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Ul_BFu31i) C1{ Fs:7 FL Fi:31}



static void Test_BFu7s_Ul_BFu31i()
{
  {
    init_simple_test("BFu7s_Ul_BFu31i");
    static STRUCT_IF_C BFu7s_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu31i, BFu7s_Ul_BFu31i)
//============================================================================


struct  BFu7s_Ul_BFu31ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Ul_BFu31ll) C1{ Fs:7 FL FL:31}



static void Test_BFu7s_Ul_BFu31ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu31ll");
    static STRUCT_IF_C BFu7s_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7s_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7s_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu31ll, BFu7s_Ul_BFu31ll)
//============================================================================


struct  BFu7s_Ul_BFu32i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Ul_BFu32i) C1{ Fs:7 FL Fi:32}



static void Test_BFu7s_Ul_BFu32i()
{
  {
    init_simple_test("BFu7s_Ul_BFu32i");
    static STRUCT_IF_C BFu7s_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu32i, BFu7s_Ul_BFu32i)
//============================================================================


struct  BFu7s_Ul_BFu32ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Ul_BFu32ll) C1{ Fs:7 FL FL:32}



static void Test_BFu7s_Ul_BFu32ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu32ll");
    static STRUCT_IF_C BFu7s_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7s_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7s_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu32ll, BFu7s_Ul_BFu32ll)
//============================================================================


struct  BFu7s_Ul_BFu33  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Ul_BFu33) C1{ Fs:7 FL FL:33}



static void Test_BFu7s_Ul_BFu33()
{
  {
    init_simple_test("BFu7s_Ul_BFu33");
    static STRUCT_IF_C BFu7s_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7s_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7s_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu33, BFu7s_Ul_BFu33)
//============================================================================


struct  BFu7s_Ul_BFu7c  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Ul_BFu7c) C1{ Fs:7 FL Fc:7}



static void Test_BFu7s_Ul_BFu7c()
{
  {
    init_simple_test("BFu7s_Ul_BFu7c");
    static STRUCT_IF_C BFu7s_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu7c, BFu7s_Ul_BFu7c)
//============================================================================


struct  BFu7s_Ul_BFu7i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Ul_BFu7i) C1{ Fs:7 FL Fi:7}



static void Test_BFu7s_Ul_BFu7i()
{
  {
    init_simple_test("BFu7s_Ul_BFu7i");
    static STRUCT_IF_C BFu7s_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu7i, BFu7s_Ul_BFu7i)
//============================================================================


struct  BFu7s_Ul_BFu7ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Ul_BFu7ll) C1{ Fs:7 FL FL:7}



static void Test_BFu7s_Ul_BFu7ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu7ll");
    static STRUCT_IF_C BFu7s_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu7ll, BFu7s_Ul_BFu7ll)
//============================================================================


struct  BFu7s_Ul_BFu7s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Ul_BFu7s) C1{ Fs:7 FL Fs:7}



static void Test_BFu7s_Ul_BFu7s()
{
  {
    init_simple_test("BFu7s_Ul_BFu7s");
    static STRUCT_IF_C BFu7s_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7s_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu7s, BFu7s_Ul_BFu7s)
//============================================================================


struct  BFu7s_Ul_BFu8c  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Ul_BFu8c) C1{ Fs:7 FL Fc:8}



static void Test_BFu7s_Ul_BFu8c()
{
  {
    init_simple_test("BFu7s_Ul_BFu8c");
    static STRUCT_IF_C BFu7s_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu8c, BFu7s_Ul_BFu8c)
//============================================================================


struct  BFu7s_Ul_BFu8i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Ul_BFu8i) C1{ Fs:7 FL Fi:8}



static void Test_BFu7s_Ul_BFu8i()
{
  {
    init_simple_test("BFu7s_Ul_BFu8i");
    static STRUCT_IF_C BFu7s_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu8i, BFu7s_Ul_BFu8i)
//============================================================================


struct  BFu7s_Ul_BFu8ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Ul_BFu8ll) C1{ Fs:7 FL FL:8}



static void Test_BFu7s_Ul_BFu8ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu8ll");
    static STRUCT_IF_C BFu7s_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu8ll, BFu7s_Ul_BFu8ll)
//============================================================================


struct  BFu7s_Ul_BFu8s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Ul_BFu8s) C1{ Fs:7 FL Fs:8}



static void Test_BFu7s_Ul_BFu8s()
{
  {
    init_simple_test("BFu7s_Ul_BFu8s");
    static STRUCT_IF_C BFu7s_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7s_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7s_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu8s, BFu7s_Ul_BFu8s)
//============================================================================


struct  BFu7s_Ul_BFu9i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Ul_BFu9i) C1{ Fs:7 FL Fi:9}



static void Test_BFu7s_Ul_BFu9i()
{
  {
    init_simple_test("BFu7s_Ul_BFu9i");
    static STRUCT_IF_C BFu7s_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu9i, BFu7s_Ul_BFu9i)
//============================================================================


struct  BFu7s_Ul_BFu9ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Ul_BFu9ll) C1{ Fs:7 FL FL:9}



static void Test_BFu7s_Ul_BFu9ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu9ll");
    static STRUCT_IF_C BFu7s_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu9ll, BFu7s_Ul_BFu9ll)
//============================================================================


struct  BFu7s_Ul_BFu9s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Ul_BFu9s) C1{ Fs:7 FL Fs:9}



static void Test_BFu7s_Ul_BFu9s()
{
  {
    init_simple_test("BFu7s_Ul_BFu9s");
    static STRUCT_IF_C BFu7s_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7s_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7s_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_BFu9s, BFu7s_Ul_BFu9s)
//============================================================================


struct  BFu7s_Ul_C  {
  unsigned short v1:7;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu7s_Ul_C) C1{ Fs:7 FL Fc}



static void Test_BFu7s_Ul_C()
{
  {
    init_simple_test("BFu7s_Ul_C");
    static STRUCT_IF_C BFu7s_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_C, BFu7s_Ul_C)
//============================================================================


struct  BFu7s_Ul_D  {
  unsigned short v1:7;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu7s_Ul_D) C1{ Fs:7 FL[2]}



static void Test_BFu7s_Ul_D()
{
  {
    init_simple_test("BFu7s_Ul_D");
    static STRUCT_IF_C BFu7s_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_D, BFu7s_Ul_D)
//============================================================================


struct  BFu7s_Ul_F  {
  unsigned short v1:7;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu7s_Ul_F) C1{ Fs:7 FL Fi}



static void Test_BFu7s_Ul_F()
{
  {
    init_simple_test("BFu7s_Ul_F");
    static STRUCT_IF_C BFu7s_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_F, BFu7s_Ul_F)
//============================================================================


struct  BFu7s_Ul_I  {
  unsigned short v1:7;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu7s_Ul_I) C1{ Fs:7 FL Fi}



static void Test_BFu7s_Ul_I()
{
  {
    init_simple_test("BFu7s_Ul_I");
    static STRUCT_IF_C BFu7s_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_I, BFu7s_Ul_I)
//============================================================================


struct  BFu7s_Ul_Ip  {
  unsigned short v1:7;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu7s_Ul_Ip) C1{ Fs:7 FL Fp}



static void Test_BFu7s_Ul_Ip()
{
  {
    init_simple_test("BFu7s_Ul_Ip");
    static STRUCT_IF_C BFu7s_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Ip, BFu7s_Ul_Ip)
//============================================================================


struct  BFu7s_Ul_L  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Ul_L) C1{ Fs:7 FL[2]}



static void Test_BFu7s_Ul_L()
{
  {
    init_simple_test("BFu7s_Ul_L");
    static STRUCT_IF_C BFu7s_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_L, BFu7s_Ul_L)
//============================================================================


struct  BFu7s_Ul_S  {
  unsigned short v1:7;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu7s_Ul_S) C1{ Fs:7 FL Fs}



static void Test_BFu7s_Ul_S()
{
  {
    init_simple_test("BFu7s_Ul_S");
    static STRUCT_IF_C BFu7s_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_S, BFu7s_Ul_S)
//============================================================================


struct  BFu7s_Ul_Uc  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Ul_Uc) C1{ Fs:7 FL Fc}



static void Test_BFu7s_Ul_Uc()
{
  {
    init_simple_test("BFu7s_Ul_Uc");
    static STRUCT_IF_C BFu7s_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Uc, BFu7s_Ul_Uc)
//============================================================================


struct  BFu7s_Ul_Ui  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Ul_Ui) C1{ Fs:7 FL Fi}



static void Test_BFu7s_Ul_Ui()
{
  {
    init_simple_test("BFu7s_Ul_Ui");
    static STRUCT_IF_C BFu7s_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Ui, BFu7s_Ul_Ui)
//============================================================================


struct  BFu7s_Ul_Ul  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Ul_Ul) C1{ Fs:7 FL[2]}



static void Test_BFu7s_Ul_Ul()
{
  {
    init_simple_test("BFu7s_Ul_Ul");
    static STRUCT_IF_C BFu7s_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7s_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Ul, BFu7s_Ul_Ul)
//============================================================================


struct  BFu7s_Ul_Us  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Ul_Us) C1{ Fs:7 FL Fs}



static void Test_BFu7s_Ul_Us()
{
  {
    init_simple_test("BFu7s_Ul_Us");
    static STRUCT_IF_C BFu7s_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Us, BFu7s_Ul_Us)
//============================================================================


struct  BFu7s_Ul_Vp  {
  unsigned short v1:7;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu7s_Ul_Vp) C1{ Fs:7 FL Fp}



static void Test_BFu7s_Ul_Vp()
{
  {
    init_simple_test("BFu7s_Ul_Vp");
    static STRUCT_IF_C BFu7s_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7s_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Ul_Vp, BFu7s_Ul_Vp)
//============================================================================


struct  BFu7s_Us  {
  unsigned short v1:7;
  unsigned short v2;
};
//SIG(1 BFu7s_Us) C1{ Fs:7 Fs}



static void Test_BFu7s_Us()
{
  {
    init_simple_test("BFu7s_Us");
    static STRUCT_IF_C BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us");
    check_field_offset(lv, v2, 2, "BFu7s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us, BFu7s_Us)
//============================================================================


struct  BFu7s_Us_BFu15i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Us_BFu15i) C1{ Fs:7 Fs Fi:15}



static void Test_BFu7s_Us_BFu15i()
{
  {
    init_simple_test("BFu7s_Us_BFu15i");
    static STRUCT_IF_C BFu7s_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu15i, BFu7s_Us_BFu15i)
//============================================================================


struct  BFu7s_Us_BFu15ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Us_BFu15ll) C1{ Fs:7 Fs FL:15}



static void Test_BFu7s_Us_BFu15ll()
{
  {
    init_simple_test("BFu7s_Us_BFu15ll");
    static STRUCT_IF_C BFu7s_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu15ll, BFu7s_Us_BFu15ll)
//============================================================================


struct  BFu7s_Us_BFu15s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Us_BFu15s) C1{ Fs:7 Fs Fs:15}



static void Test_BFu7s_Us_BFu15s()
{
  {
    init_simple_test("BFu7s_Us_BFu15s");
    static STRUCT_IF_C BFu7s_Us_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7s_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu15s, BFu7s_Us_BFu15s)
//============================================================================


struct  BFu7s_Us_BFu16i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Us_BFu16i) C1{ Fs:7 Fs Fi:16}



static void Test_BFu7s_Us_BFu16i()
{
  {
    init_simple_test("BFu7s_Us_BFu16i");
    static STRUCT_IF_C BFu7s_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu16i, BFu7s_Us_BFu16i)
//============================================================================


struct  BFu7s_Us_BFu16ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Us_BFu16ll) C1{ Fs:7 Fs FL:16}



static void Test_BFu7s_Us_BFu16ll()
{
  {
    init_simple_test("BFu7s_Us_BFu16ll");
    static STRUCT_IF_C BFu7s_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu16ll, BFu7s_Us_BFu16ll)
//============================================================================


struct  BFu7s_Us_BFu16s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Us_BFu16s) C1{ Fs:7 Fs Fs:16}



static void Test_BFu7s_Us_BFu16s()
{
  {
    init_simple_test("BFu7s_Us_BFu16s");
    static STRUCT_IF_C BFu7s_Us_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7s_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu16s, BFu7s_Us_BFu16s)
//============================================================================


struct  BFu7s_Us_BFu17i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Us_BFu17i) C1{ Fs:7 Fs Fi:17}



static void Test_BFu7s_Us_BFu17i()
{
  {
    init_simple_test("BFu7s_Us_BFu17i");
    static STRUCT_IF_C BFu7s_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu17i, BFu7s_Us_BFu17i)
//============================================================================


struct  BFu7s_Us_BFu17ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Us_BFu17ll) C1{ Fs:7 Fs FL:17}



static void Test_BFu7s_Us_BFu17ll()
{
  {
    init_simple_test("BFu7s_Us_BFu17ll");
    static STRUCT_IF_C BFu7s_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7s_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu17ll, BFu7s_Us_BFu17ll)
//============================================================================


struct  BFu7s_Us_BFu1c  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Us_BFu1c) C1{ Fs:7 Fs Fc:1}



static void Test_BFu7s_Us_BFu1c()
{
  {
    init_simple_test("BFu7s_Us_BFu1c");
    static STRUCT_IF_C BFu7s_Us_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu1c, BFu7s_Us_BFu1c)
//============================================================================


struct  BFu7s_Us_BFu1i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Us_BFu1i) C1{ Fs:7 Fs Fi:1}



static void Test_BFu7s_Us_BFu1i()
{
  {
    init_simple_test("BFu7s_Us_BFu1i");
    static STRUCT_IF_C BFu7s_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu1i, BFu7s_Us_BFu1i)
//============================================================================


struct  BFu7s_Us_BFu1ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Us_BFu1ll) C1{ Fs:7 Fs FL:1}



static void Test_BFu7s_Us_BFu1ll()
{
  {
    init_simple_test("BFu7s_Us_BFu1ll");
    static STRUCT_IF_C BFu7s_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu1ll, BFu7s_Us_BFu1ll)
//============================================================================


struct  BFu7s_Us_BFu1s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Us_BFu1s) C1{ Fs:7 Fs Fs:1}



static void Test_BFu7s_Us_BFu1s()
{
  {
    init_simple_test("BFu7s_Us_BFu1s");
    static STRUCT_IF_C BFu7s_Us_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7s_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu1s, BFu7s_Us_BFu1s)
//============================================================================


struct  BFu7s_Us_BFu31i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Us_BFu31i) C1{ Fs:7 Fs Fi:31}



static void Test_BFu7s_Us_BFu31i()
{
  {
    init_simple_test("BFu7s_Us_BFu31i");
    static STRUCT_IF_C BFu7s_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu31i, BFu7s_Us_BFu31i)
//============================================================================


struct  BFu7s_Us_BFu31ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Us_BFu31ll) C1{ Fs:7 Fs FL:31}



static void Test_BFu7s_Us_BFu31ll()
{
  {
    init_simple_test("BFu7s_Us_BFu31ll");
    static STRUCT_IF_C BFu7s_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7s_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu31ll, BFu7s_Us_BFu31ll)
//============================================================================


struct  BFu7s_Us_BFu32i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Us_BFu32i) C1{ Fs:7 Fs Fi:32}



static void Test_BFu7s_Us_BFu32i()
{
  {
    init_simple_test("BFu7s_Us_BFu32i");
    static STRUCT_IF_C BFu7s_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu32i, BFu7s_Us_BFu32i)
//============================================================================


struct  BFu7s_Us_BFu32ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Us_BFu32ll) C1{ Fs:7 Fs FL:32}



static void Test_BFu7s_Us_BFu32ll()
{
  {
    init_simple_test("BFu7s_Us_BFu32ll");
    static STRUCT_IF_C BFu7s_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7s_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu32ll, BFu7s_Us_BFu32ll)
//============================================================================


struct  BFu7s_Us_BFu33  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Us_BFu33) C1{ Fs:7 Fs FL:33}



static void Test_BFu7s_Us_BFu33()
{
  {
    init_simple_test("BFu7s_Us_BFu33");
    static STRUCT_IF_C BFu7s_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7s_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7s_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu33, BFu7s_Us_BFu33)
//============================================================================


struct  BFu7s_Us_BFu7c  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Us_BFu7c) C1{ Fs:7 Fs Fc:7}



static void Test_BFu7s_Us_BFu7c()
{
  {
    init_simple_test("BFu7s_Us_BFu7c");
    static STRUCT_IF_C BFu7s_Us_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu7c, BFu7s_Us_BFu7c)
//============================================================================


struct  BFu7s_Us_BFu7i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Us_BFu7i) C1{ Fs:7 Fs Fi:7}



static void Test_BFu7s_Us_BFu7i()
{
  {
    init_simple_test("BFu7s_Us_BFu7i");
    static STRUCT_IF_C BFu7s_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu7i, BFu7s_Us_BFu7i)
//============================================================================


struct  BFu7s_Us_BFu7ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Us_BFu7ll) C1{ Fs:7 Fs FL:7}



static void Test_BFu7s_Us_BFu7ll()
{
  {
    init_simple_test("BFu7s_Us_BFu7ll");
    static STRUCT_IF_C BFu7s_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu7ll, BFu7s_Us_BFu7ll)
//============================================================================


struct  BFu7s_Us_BFu7s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Us_BFu7s) C1{ Fs:7 Fs Fs:7}



static void Test_BFu7s_Us_BFu7s()
{
  {
    init_simple_test("BFu7s_Us_BFu7s");
    static STRUCT_IF_C BFu7s_Us_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7s_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu7s, BFu7s_Us_BFu7s)
//============================================================================


struct  BFu7s_Us_BFu8c  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Us_BFu8c) C1{ Fs:7 Fs Fc:8}



static void Test_BFu7s_Us_BFu8c()
{
  {
    init_simple_test("BFu7s_Us_BFu8c");
    static STRUCT_IF_C BFu7s_Us_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu8c, BFu7s_Us_BFu8c)
//============================================================================


struct  BFu7s_Us_BFu8i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Us_BFu8i) C1{ Fs:7 Fs Fi:8}



static void Test_BFu7s_Us_BFu8i()
{
  {
    init_simple_test("BFu7s_Us_BFu8i");
    static STRUCT_IF_C BFu7s_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu8i, BFu7s_Us_BFu8i)
//============================================================================


struct  BFu7s_Us_BFu8ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Us_BFu8ll) C1{ Fs:7 Fs FL:8}



static void Test_BFu7s_Us_BFu8ll()
{
  {
    init_simple_test("BFu7s_Us_BFu8ll");
    static STRUCT_IF_C BFu7s_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu8ll, BFu7s_Us_BFu8ll)
//============================================================================


struct  BFu7s_Us_BFu8s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Us_BFu8s) C1{ Fs:7 Fs Fs:8}



static void Test_BFu7s_Us_BFu8s()
{
  {
    init_simple_test("BFu7s_Us_BFu8s");
    static STRUCT_IF_C BFu7s_Us_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7s_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu8s, BFu7s_Us_BFu8s)
//============================================================================


struct  BFu7s_Us_BFu9i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Us_BFu9i) C1{ Fs:7 Fs Fi:9}



static void Test_BFu7s_Us_BFu9i()
{
  {
    init_simple_test("BFu7s_Us_BFu9i");
    static STRUCT_IF_C BFu7s_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu9i, BFu7s_Us_BFu9i)
//============================================================================


struct  BFu7s_Us_BFu9ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Us_BFu9ll) C1{ Fs:7 Fs FL:9}



static void Test_BFu7s_Us_BFu9ll()
{
  {
    init_simple_test("BFu7s_Us_BFu9ll");
    static STRUCT_IF_C BFu7s_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu9ll, BFu7s_Us_BFu9ll)
//============================================================================


struct  BFu7s_Us_BFu9s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Us_BFu9s) C1{ Fs:7 Fs Fs:9}



static void Test_BFu7s_Us_BFu9s()
{
  {
    init_simple_test("BFu7s_Us_BFu9s");
    static STRUCT_IF_C BFu7s_Us_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7s_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_BFu9s, BFu7s_Us_BFu9s)
//============================================================================


struct  BFu7s_Us_C  {
  unsigned short v1:7;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu7s_Us_C) C1{ Fs:7 Fs Fc}



static void Test_BFu7s_Us_C()
{
  {
    init_simple_test("BFu7s_Us_C");
    static STRUCT_IF_C BFu7s_Us_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_C");
    check_field_offset(lv, v2, 2, "BFu7s_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_C, BFu7s_Us_C)
//============================================================================


struct  BFu7s_Us_D  {
  unsigned short v1:7;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu7s_Us_D) C1{ Fs:7 Fs FL}



static void Test_BFu7s_Us_D()
{
  {
    init_simple_test("BFu7s_Us_D");
    static STRUCT_IF_C BFu7s_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_D");
    check_field_offset(lv, v2, 2, "BFu7s_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_D, BFu7s_Us_D)
//============================================================================


struct  BFu7s_Us_F  {
  unsigned short v1:7;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu7s_Us_F) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_Us_F()
{
  {
    init_simple_test("BFu7s_Us_F");
    static STRUCT_IF_C BFu7s_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_F");
    check_field_offset(lv, v2, 2, "BFu7s_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_F, BFu7s_Us_F)
//============================================================================


struct  BFu7s_Us_I  {
  unsigned short v1:7;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu7s_Us_I) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_Us_I()
{
  {
    init_simple_test("BFu7s_Us_I");
    static STRUCT_IF_C BFu7s_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_I");
    check_field_offset(lv, v2, 2, "BFu7s_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_I, BFu7s_Us_I)
//============================================================================


struct  BFu7s_Us_Ip  {
  unsigned short v1:7;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu7s_Us_Ip) C1{ Fs:7 Fs Fp}



static void Test_BFu7s_Us_Ip()
{
  {
    init_simple_test("BFu7s_Us_Ip");
    static STRUCT_IF_C BFu7s_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Ip, BFu7s_Us_Ip)
//============================================================================


struct  BFu7s_Us_L  {
  unsigned short v1:7;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Us_L) C1{ Fs:7 Fs FL}



static void Test_BFu7s_Us_L()
{
  {
    init_simple_test("BFu7s_Us_L");
    static STRUCT_IF_C BFu7s_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_L");
    check_field_offset(lv, v2, 2, "BFu7s_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_L, BFu7s_Us_L)
//============================================================================


struct  BFu7s_Us_S  {
  unsigned short v1:7;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu7s_Us_S) C1{ Fs:7 Fs[2]}



static void Test_BFu7s_Us_S()
{
  {
    init_simple_test("BFu7s_Us_S");
    static STRUCT_IF_C BFu7s_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_S");
    check_field_offset(lv, v2, 2, "BFu7s_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_S, BFu7s_Us_S)
//============================================================================


struct  BFu7s_Us_Uc  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Us_Uc) C1{ Fs:7 Fs Fc}



static void Test_BFu7s_Us_Uc()
{
  {
    init_simple_test("BFu7s_Us_Uc");
    static STRUCT_IF_C BFu7s_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Uc, BFu7s_Us_Uc)
//============================================================================


struct  BFu7s_Us_Ui  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Us_Ui) C1{ Fs:7 Fs Fi}



static void Test_BFu7s_Us_Ui()
{
  {
    init_simple_test("BFu7s_Us_Ui");
    static STRUCT_IF_C BFu7s_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Ui, BFu7s_Us_Ui)
//============================================================================


struct  BFu7s_Us_Ul  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Us_Ul) C1{ Fs:7 Fs FL}



static void Test_BFu7s_Us_Ul()
{
  {
    init_simple_test("BFu7s_Us_Ul");
    static STRUCT_IF_C BFu7s_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Ul, BFu7s_Us_Ul)
//============================================================================


struct  BFu7s_Us_Us  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Us_Us) C1{ Fs:7 Fs[2]}



static void Test_BFu7s_Us_Us()
{
  {
    init_simple_test("BFu7s_Us_Us");
    static STRUCT_IF_C BFu7s_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7s_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Us");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7s_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Us, BFu7s_Us_Us)
//============================================================================


struct  BFu7s_Us_Vp  {
  unsigned short v1:7;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu7s_Us_Vp) C1{ Fs:7 Fs Fp}



static void Test_BFu7s_Us_Vp()
{
  {
    init_simple_test("BFu7s_Us_Vp");
    static STRUCT_IF_C BFu7s_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu7s_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7s_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Us_Vp, BFu7s_Us_Vp)
//============================================================================


struct  BFu7s_Vp  {
  unsigned short v1:7;
  void *v2;
};
//SIG(1 BFu7s_Vp) C1{ Fs:7 Fp}



static void Test_BFu7s_Vp()
{
  {
    init_simple_test("BFu7s_Vp");
    static STRUCT_IF_C BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp, BFu7s_Vp)
//============================================================================


struct  BFu7s_Vp_BFu15i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7s_Vp_BFu15i) C1{ Fs:7 Fp Fi:15}



static void Test_BFu7s_Vp_BFu15i()
{
  {
    init_simple_test("BFu7s_Vp_BFu15i");
    static STRUCT_IF_C BFu7s_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu15i, BFu7s_Vp_BFu15i)
//============================================================================


struct  BFu7s_Vp_BFu15ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7s_Vp_BFu15ll) C1{ Fs:7 Fp FL:15}



static void Test_BFu7s_Vp_BFu15ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu15ll");
    static STRUCT_IF_C BFu7s_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu15ll, BFu7s_Vp_BFu15ll)
//============================================================================


struct  BFu7s_Vp_BFu15s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7s_Vp_BFu15s) C1{ Fs:7 Fp Fs:15}



static void Test_BFu7s_Vp_BFu15s()
{
  {
    init_simple_test("BFu7s_Vp_BFu15s");
    static STRUCT_IF_C BFu7s_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7s_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7s_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu15s, BFu7s_Vp_BFu15s)
//============================================================================


struct  BFu7s_Vp_BFu16i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7s_Vp_BFu16i) C1{ Fs:7 Fp Fi:16}



static void Test_BFu7s_Vp_BFu16i()
{
  {
    init_simple_test("BFu7s_Vp_BFu16i");
    static STRUCT_IF_C BFu7s_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu16i, BFu7s_Vp_BFu16i)
//============================================================================


struct  BFu7s_Vp_BFu16ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7s_Vp_BFu16ll) C1{ Fs:7 Fp FL:16}



static void Test_BFu7s_Vp_BFu16ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu16ll");
    static STRUCT_IF_C BFu7s_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu16ll, BFu7s_Vp_BFu16ll)
//============================================================================


struct  BFu7s_Vp_BFu16s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7s_Vp_BFu16s) C1{ Fs:7 Fp Fs:16}



static void Test_BFu7s_Vp_BFu16s()
{
  {
    init_simple_test("BFu7s_Vp_BFu16s");
    static STRUCT_IF_C BFu7s_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7s_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7s_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu16s, BFu7s_Vp_BFu16s)
//============================================================================


struct  BFu7s_Vp_BFu17i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7s_Vp_BFu17i) C1{ Fs:7 Fp Fi:17}



static void Test_BFu7s_Vp_BFu17i()
{
  {
    init_simple_test("BFu7s_Vp_BFu17i");
    static STRUCT_IF_C BFu7s_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7s_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7s_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu17i, BFu7s_Vp_BFu17i)
//============================================================================


struct  BFu7s_Vp_BFu17ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7s_Vp_BFu17ll) C1{ Fs:7 Fp FL:17}



static void Test_BFu7s_Vp_BFu17ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu17ll");
    static STRUCT_IF_C BFu7s_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7s_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7s_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu17ll, BFu7s_Vp_BFu17ll)
//============================================================================


struct  BFu7s_Vp_BFu1c  {
  unsigned short v1:7;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7s_Vp_BFu1c) C1{ Fs:7 Fp Fc:1}



static void Test_BFu7s_Vp_BFu1c()
{
  {
    init_simple_test("BFu7s_Vp_BFu1c");
    static STRUCT_IF_C BFu7s_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu1c, BFu7s_Vp_BFu1c)
//============================================================================


struct  BFu7s_Vp_BFu1i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7s_Vp_BFu1i) C1{ Fs:7 Fp Fi:1}



static void Test_BFu7s_Vp_BFu1i()
{
  {
    init_simple_test("BFu7s_Vp_BFu1i");
    static STRUCT_IF_C BFu7s_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu1i, BFu7s_Vp_BFu1i)
//============================================================================


struct  BFu7s_Vp_BFu1ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7s_Vp_BFu1ll) C1{ Fs:7 Fp FL:1}



static void Test_BFu7s_Vp_BFu1ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu1ll");
    static STRUCT_IF_C BFu7s_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu1ll, BFu7s_Vp_BFu1ll)
//============================================================================


struct  BFu7s_Vp_BFu1s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7s_Vp_BFu1s) C1{ Fs:7 Fp Fs:1}



static void Test_BFu7s_Vp_BFu1s()
{
  {
    init_simple_test("BFu7s_Vp_BFu1s");
    static STRUCT_IF_C BFu7s_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7s_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu1s, BFu7s_Vp_BFu1s)
//============================================================================


struct  BFu7s_Vp_BFu31i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7s_Vp_BFu31i) C1{ Fs:7 Fp Fi:31}



static void Test_BFu7s_Vp_BFu31i()
{
  {
    init_simple_test("BFu7s_Vp_BFu31i");
    static STRUCT_IF_C BFu7s_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7s_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7s_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu31i, BFu7s_Vp_BFu31i)
//============================================================================


struct  BFu7s_Vp_BFu31ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7s_Vp_BFu31ll) C1{ Fs:7 Fp FL:31}



static void Test_BFu7s_Vp_BFu31ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu31ll");
    static STRUCT_IF_C BFu7s_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7s_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7s_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu31ll, BFu7s_Vp_BFu31ll)
//============================================================================


struct  BFu7s_Vp_BFu32i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7s_Vp_BFu32i) C1{ Fs:7 Fp Fi:32}



static void Test_BFu7s_Vp_BFu32i()
{
  {
    init_simple_test("BFu7s_Vp_BFu32i");
    static STRUCT_IF_C BFu7s_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7s_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7s_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu32i, BFu7s_Vp_BFu32i)
//============================================================================


struct  BFu7s_Vp_BFu32ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7s_Vp_BFu32ll) C1{ Fs:7 Fp FL:32}



static void Test_BFu7s_Vp_BFu32ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu32ll");
    static STRUCT_IF_C BFu7s_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7s_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7s_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu32ll, BFu7s_Vp_BFu32ll)
//============================================================================


struct  BFu7s_Vp_BFu33  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7s_Vp_BFu33) C1{ Fs:7 Fp FL:33}



static void Test_BFu7s_Vp_BFu33()
{
  {
    init_simple_test("BFu7s_Vp_BFu33");
    static STRUCT_IF_C BFu7s_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7s_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7s_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu33, BFu7s_Vp_BFu33)
//============================================================================


struct  BFu7s_Vp_BFu7c  {
  unsigned short v1:7;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7s_Vp_BFu7c) C1{ Fs:7 Fp Fc:7}



static void Test_BFu7s_Vp_BFu7c()
{
  {
    init_simple_test("BFu7s_Vp_BFu7c");
    static STRUCT_IF_C BFu7s_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu7c, BFu7s_Vp_BFu7c)
//============================================================================


struct  BFu7s_Vp_BFu7i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7s_Vp_BFu7i) C1{ Fs:7 Fp Fi:7}



static void Test_BFu7s_Vp_BFu7i()
{
  {
    init_simple_test("BFu7s_Vp_BFu7i");
    static STRUCT_IF_C BFu7s_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu7i, BFu7s_Vp_BFu7i)
//============================================================================


struct  BFu7s_Vp_BFu7ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7s_Vp_BFu7ll) C1{ Fs:7 Fp FL:7}



static void Test_BFu7s_Vp_BFu7ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu7ll");
    static STRUCT_IF_C BFu7s_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu7ll, BFu7s_Vp_BFu7ll)
//============================================================================


struct  BFu7s_Vp_BFu7s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7s_Vp_BFu7s) C1{ Fs:7 Fp Fs:7}



static void Test_BFu7s_Vp_BFu7s()
{
  {
    init_simple_test("BFu7s_Vp_BFu7s");
    static STRUCT_IF_C BFu7s_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7s_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu7s, BFu7s_Vp_BFu7s)
//============================================================================


struct  BFu7s_Vp_BFu8c  {
  unsigned short v1:7;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7s_Vp_BFu8c) C1{ Fs:7 Fp Fc:8}



static void Test_BFu7s_Vp_BFu8c()
{
  {
    init_simple_test("BFu7s_Vp_BFu8c");
    static STRUCT_IF_C BFu7s_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu8c, BFu7s_Vp_BFu8c)
//============================================================================


struct  BFu7s_Vp_BFu8i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7s_Vp_BFu8i) C1{ Fs:7 Fp Fi:8}



static void Test_BFu7s_Vp_BFu8i()
{
  {
    init_simple_test("BFu7s_Vp_BFu8i");
    static STRUCT_IF_C BFu7s_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu8i, BFu7s_Vp_BFu8i)
//============================================================================


struct  BFu7s_Vp_BFu8ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7s_Vp_BFu8ll) C1{ Fs:7 Fp FL:8}



static void Test_BFu7s_Vp_BFu8ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu8ll");
    static STRUCT_IF_C BFu7s_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu8ll, BFu7s_Vp_BFu8ll)
//============================================================================


struct  BFu7s_Vp_BFu8s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7s_Vp_BFu8s) C1{ Fs:7 Fp Fs:8}



static void Test_BFu7s_Vp_BFu8s()
{
  {
    init_simple_test("BFu7s_Vp_BFu8s");
    static STRUCT_IF_C BFu7s_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7s_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7s_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu8s, BFu7s_Vp_BFu8s)
//============================================================================


struct  BFu7s_Vp_BFu9i  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7s_Vp_BFu9i) C1{ Fs:7 Fp Fi:9}



static void Test_BFu7s_Vp_BFu9i()
{
  {
    init_simple_test("BFu7s_Vp_BFu9i");
    static STRUCT_IF_C BFu7s_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu9i, BFu7s_Vp_BFu9i)
//============================================================================


struct  BFu7s_Vp_BFu9ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7s_Vp_BFu9ll) C1{ Fs:7 Fp FL:9}



static void Test_BFu7s_Vp_BFu9ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu9ll");
    static STRUCT_IF_C BFu7s_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu9ll, BFu7s_Vp_BFu9ll)
//============================================================================


struct  BFu7s_Vp_BFu9s  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7s_Vp_BFu9s) C1{ Fs:7 Fp Fs:9}



static void Test_BFu7s_Vp_BFu9s()
{
  {
    init_simple_test("BFu7s_Vp_BFu9s");
    static STRUCT_IF_C BFu7s_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7s_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7s_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_BFu9s, BFu7s_Vp_BFu9s)
//============================================================================


struct  BFu7s_Vp_C  {
  unsigned short v1:7;
  void *v2;
  char v3;
};
//SIG(1 BFu7s_Vp_C) C1{ Fs:7 Fp Fc}



static void Test_BFu7s_Vp_C()
{
  {
    init_simple_test("BFu7s_Vp_C");
    static STRUCT_IF_C BFu7s_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_C, BFu7s_Vp_C)
//============================================================================


struct  BFu7s_Vp_D  {
  unsigned short v1:7;
  void *v2;
  double v3;
};
//SIG(1 BFu7s_Vp_D) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Vp_D()
{
  {
    init_simple_test("BFu7s_Vp_D");
    static STRUCT_IF_C BFu7s_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_D, BFu7s_Vp_D)
//============================================================================


struct  BFu7s_Vp_F  {
  unsigned short v1:7;
  void *v2;
  float v3;
};
//SIG(1 BFu7s_Vp_F) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Vp_F()
{
  {
    init_simple_test("BFu7s_Vp_F");
    static STRUCT_IF_C BFu7s_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_F, BFu7s_Vp_F)
//============================================================================


struct  BFu7s_Vp_I  {
  unsigned short v1:7;
  void *v2;
  int v3;
};
//SIG(1 BFu7s_Vp_I) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Vp_I()
{
  {
    init_simple_test("BFu7s_Vp_I");
    static STRUCT_IF_C BFu7s_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_I, BFu7s_Vp_I)
//============================================================================


struct  BFu7s_Vp_Ip  {
  unsigned short v1:7;
  void *v2;
  int *v3;
};
//SIG(1 BFu7s_Vp_Ip) C1{ Fs:7 Fp[2]}



static void Test_BFu7s_Vp_Ip()
{
  {
    init_simple_test("BFu7s_Vp_Ip");
    static STRUCT_IF_C BFu7s_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Ip, BFu7s_Vp_Ip)
//============================================================================


struct  BFu7s_Vp_L  {
  unsigned short v1:7;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu7s_Vp_L) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Vp_L()
{
  {
    init_simple_test("BFu7s_Vp_L");
    static STRUCT_IF_C BFu7s_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_L, BFu7s_Vp_L)
//============================================================================


struct  BFu7s_Vp_S  {
  unsigned short v1:7;
  void *v2;
  short v3;
};
//SIG(1 BFu7s_Vp_S) C1{ Fs:7 Fp Fs}



static void Test_BFu7s_Vp_S()
{
  {
    init_simple_test("BFu7s_Vp_S");
    static STRUCT_IF_C BFu7s_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_S, BFu7s_Vp_S)
//============================================================================


struct  BFu7s_Vp_Uc  {
  unsigned short v1:7;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu7s_Vp_Uc) C1{ Fs:7 Fp Fc}



static void Test_BFu7s_Vp_Uc()
{
  {
    init_simple_test("BFu7s_Vp_Uc");
    static STRUCT_IF_C BFu7s_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Uc, BFu7s_Vp_Uc)
//============================================================================


struct  BFu7s_Vp_Ui  {
  unsigned short v1:7;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu7s_Vp_Ui) C1{ Fs:7 Fp Fi}



static void Test_BFu7s_Vp_Ui()
{
  {
    init_simple_test("BFu7s_Vp_Ui");
    static STRUCT_IF_C BFu7s_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Ui, BFu7s_Vp_Ui)
//============================================================================


struct  BFu7s_Vp_Ul  {
  unsigned short v1:7;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu7s_Vp_Ul) C1{ Fs:7 Fp FL}



static void Test_BFu7s_Vp_Ul()
{
  {
    init_simple_test("BFu7s_Vp_Ul");
    static STRUCT_IF_C BFu7s_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7s_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Ul, BFu7s_Vp_Ul)
//============================================================================


struct  BFu7s_Vp_Us  {
  unsigned short v1:7;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu7s_Vp_Us) C1{ Fs:7 Fp Fs}



static void Test_BFu7s_Vp_Us()
{
  {
    init_simple_test("BFu7s_Vp_Us");
    static STRUCT_IF_C BFu7s_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Us, BFu7s_Vp_Us)
//============================================================================


struct  BFu7s_Vp_Vp  {
  unsigned short v1:7;
  void *v2;
  void *v3;
};
//SIG(1 BFu7s_Vp_Vp) C1{ Fs:7 Fp[2]}



static void Test_BFu7s_Vp_Vp()
{
  {
    init_simple_test("BFu7s_Vp_Vp");
    static STRUCT_IF_C BFu7s_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7s_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7s_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7s_Vp_Vp, BFu7s_Vp_Vp)
//============================================================================


struct  BFu8c  {
  unsigned char v1:8;
};
//SIG(1 BFu8c) C1{ Fc:8}



static void Test_BFu8c()
{
  {
    init_simple_test("BFu8c");
    static STRUCT_IF_C BFu8c lv;
    check2(sizeof(lv), 1, "sizeof(BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c, BFu8c)
//============================================================================


struct  BFu8c_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
};
//SIG(1 BFu8c_BFs8c) C1{ Fc:8 Fc:8}



static void Test_BFu8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFs8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c, BFu8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c) C1{ Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu8c_BFs8c_BFs8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c, BFu8c_BFs8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFs8c) C1{ Fc:8 Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFs8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFs8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFs8c, BFu8c_BFs8c_BFs8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFs8i) C1{ Fc:8 Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFs8i, BFu8c_BFs8c_BFs8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFs8ll) C1{ Fc:8 Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFs8ll, BFu8c_BFs8c_BFs8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFs8s) C1{ Fc:8 Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFs8s, BFu8c_BFs8c_BFs8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFu8c) C1{ Fc:8 Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFs8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFu8c, BFu8c_BFs8c_BFs8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFu8i) C1{ Fc:8 Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFu8i, BFu8c_BFs8c_BFs8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFu8ll) C1{ Fc:8 Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFu8ll, BFu8c_BFs8c_BFs8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8c_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8c_BFu8s) C1{ Fc:8 Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8c_BFu8s, BFu8c_BFs8c_BFs8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i) C1{ Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i, BFu8c_BFs8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFs8c) C1{ Fc:8 Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFs8c, BFu8c_BFs8c_BFs8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFs8i) C1{ Fc:8 Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFs8i, BFu8c_BFs8c_BFs8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFs8ll) C1{ Fc:8 Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFs8ll, BFu8c_BFs8c_BFs8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFs8s) C1{ Fc:8 Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFs8s, BFu8c_BFs8c_BFs8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFu8c) C1{ Fc:8 Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFu8c, BFu8c_BFs8c_BFs8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFu8i) C1{ Fc:8 Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFu8i, BFu8c_BFs8c_BFs8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFu8ll) C1{ Fc:8 Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFu8ll, BFu8c_BFs8c_BFs8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8i_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8i_BFu8s) C1{ Fc:8 Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8i_BFu8s, BFu8c_BFs8c_BFs8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll) C1{ Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll, BFu8c_BFs8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFs8c) C1{ Fc:8 Fc:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFs8c, BFu8c_BFs8c_BFs8ll_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFs8i) C1{ Fc:8 Fc:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFs8i, BFu8c_BFs8c_BFs8ll_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFs8ll) C1{ Fc:8 Fc:8 FL:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFs8ll, BFu8c_BFs8c_BFs8ll_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFs8s) C1{ Fc:8 Fc:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFs8s, BFu8c_BFs8c_BFs8ll_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFu8c) C1{ Fc:8 Fc:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFu8c, BFu8c_BFs8c_BFs8ll_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFu8i) C1{ Fc:8 Fc:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFu8i, BFu8c_BFs8c_BFs8ll_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFu8ll) C1{ Fc:8 Fc:8 FL:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFu8ll, BFu8c_BFs8c_BFs8ll_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8ll_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed __tsi64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8ll_BFu8s) C1{ Fc:8 Fc:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8ll_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8ll_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8ll_BFu8s, BFu8c_BFs8c_BFs8ll_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s) C1{ Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s, BFu8c_BFs8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFs8c) C1{ Fc:8 Fc:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8s_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFs8c, BFu8c_BFs8c_BFs8s_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFs8i) C1{ Fc:8 Fc:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8s_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFs8i, BFu8c_BFs8c_BFs8s_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFs8ll) C1{ Fc:8 Fc:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8s_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFs8ll, BFu8c_BFs8c_BFs8s_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFs8s) C1{ Fc:8 Fc:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8s_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFs8s, BFu8c_BFs8c_BFs8s_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFu8c) C1{ Fc:8 Fc:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8c_BFs8s_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFu8c, BFu8c_BFs8c_BFs8s_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFu8i) C1{ Fc:8 Fc:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8c_BFs8s_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFs8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFu8i, BFu8c_BFs8c_BFs8s_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFu8ll) C1{ Fc:8 Fc:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8c_BFs8s_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFs8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFs8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFu8ll, BFu8c_BFs8c_BFs8s_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFs8s_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  signed short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFs8s_BFu8s) C1{ Fc:8 Fc:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8c_BFs8s_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFs8s_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFs8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFs8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFs8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFs8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFs8s_BFu8s, BFu8c_BFs8c_BFs8s_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c) C1{ Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu8c_BFs8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c, BFu8c_BFs8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFs8c) C1{ Fc:8 Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFs8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFu8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFs8c, BFu8c_BFs8c_BFu8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFs8i) C1{ Fc:8 Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFs8i, BFu8c_BFs8c_BFu8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFs8ll) C1{ Fc:8 Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFs8ll, BFu8c_BFs8c_BFu8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFs8s) C1{ Fc:8 Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFs8s, BFu8c_BFs8c_BFu8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFu8c) C1{ Fc:8 Fc:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFs8c_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFu8c, BFu8c_BFs8c_BFu8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFu8i) C1{ Fc:8 Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFu8i, BFu8c_BFs8c_BFu8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFu8ll) C1{ Fc:8 Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFu8ll, BFu8c_BFs8c_BFu8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8c_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8c_BFu8s) C1{ Fc:8 Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8c_BFu8s, BFu8c_BFs8c_BFu8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i) C1{ Fc:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i, BFu8c_BFs8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFs8c) C1{ Fc:8 Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFs8c, BFu8c_BFs8c_BFu8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFs8i) C1{ Fc:8 Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFs8i, BFu8c_BFs8c_BFu8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFs8ll) C1{ Fc:8 Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFs8ll, BFu8c_BFs8c_BFu8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFs8s) C1{ Fc:8 Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFs8s, BFu8c_BFs8c_BFu8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFu8c) C1{ Fc:8 Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFu8c, BFu8c_BFs8c_BFu8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFu8i) C1{ Fc:8 Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFu8i, BFu8c_BFs8c_BFu8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFu8ll) C1{ Fc:8 Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFu8ll, BFu8c_BFs8c_BFu8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8i_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8i_BFu8s) C1{ Fc:8 Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8i_BFu8s, BFu8c_BFs8c_BFu8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll) C1{ Fc:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll, BFu8c_BFs8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFs8c) C1{ Fc:8 Fc:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFs8c, BFu8c_BFs8c_BFu8ll_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFs8i) C1{ Fc:8 Fc:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFs8i, BFu8c_BFs8c_BFu8ll_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFs8ll) C1{ Fc:8 Fc:8 FL:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFs8ll, BFu8c_BFs8c_BFu8ll_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFs8s) C1{ Fc:8 Fc:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFs8s, BFu8c_BFs8c_BFu8ll_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFu8c) C1{ Fc:8 Fc:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFu8c, BFu8c_BFs8c_BFu8ll_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFu8i) C1{ Fc:8 Fc:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFu8i, BFu8c_BFs8c_BFu8ll_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFu8ll) C1{ Fc:8 Fc:8 FL:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFu8ll, BFu8c_BFs8c_BFu8ll_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8ll_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  __tsu64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8ll_BFu8s) C1{ Fc:8 Fc:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8ll_BFu8s, BFu8c_BFs8c_BFu8ll_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s) C1{ Fc:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s, BFu8c_BFs8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFs8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFs8c) C1{ Fc:8 Fc:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8s_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFs8c, BFu8c_BFs8c_BFu8s_BFs8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFs8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFs8i) C1{ Fc:8 Fc:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8s_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFs8i, BFu8c_BFs8c_BFu8s_BFs8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFs8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFs8ll) C1{ Fc:8 Fc:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8s_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFs8ll, BFu8c_BFs8c_BFu8s_BFs8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFs8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFs8s) C1{ Fc:8 Fc:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8s_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFs8s, BFu8c_BFs8c_BFu8s_BFs8s)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFu8c  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFu8c) C1{ Fc:8 Fc:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8c_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFu8c, BFu8c_BFs8c_BFu8s_BFu8c)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFu8i  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFu8i) C1{ Fc:8 Fc:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8c_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8c_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFu8i, BFu8c_BFs8c_BFu8s_BFu8i)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFu8ll  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFu8ll) C1{ Fc:8 Fc:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8c_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8c_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8c_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFu8ll, BFu8c_BFs8c_BFu8s_BFu8ll)
//============================================================================


struct  BFu8c_BFs8c_BFu8s_BFu8s  {
  unsigned char v1:8;
  signed char v2:8;
  unsigned short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8c_BFu8s_BFu8s) C1{ Fc:8 Fc:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8c_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8c_BFu8s_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8c_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8c_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFs8c_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8c_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8c_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8c_BFu8s_BFu8s, BFu8c_BFs8c_BFu8s_BFu8s)
//============================================================================


struct  BFu8c_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
};
//SIG(1 BFu8c_BFs8i) C1{ Fc:8 Fi:8}



static void Test_BFu8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i, BFu8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c) C1{ Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c, BFu8c_BFs8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFs8c) C1{ Fc:8 Fi:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFs8c, BFu8c_BFs8i_BFs8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFs8i) C1{ Fc:8 Fi:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFs8i, BFu8c_BFs8i_BFs8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFs8ll) C1{ Fc:8 Fi:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFs8ll, BFu8c_BFs8i_BFs8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFs8s) C1{ Fc:8 Fi:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFs8s, BFu8c_BFs8i_BFs8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFu8c) C1{ Fc:8 Fi:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFu8c, BFu8c_BFs8i_BFs8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFu8i) C1{ Fc:8 Fi:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFu8i, BFu8c_BFs8i_BFs8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFu8ll) C1{ Fc:8 Fi:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFu8ll, BFu8c_BFs8i_BFs8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8c_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8c_BFu8s) C1{ Fc:8 Fi:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8c_BFu8s, BFu8c_BFs8i_BFs8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i) C1{ Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i, BFu8c_BFs8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFs8c) C1{ Fc:8 Fi:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFs8c, BFu8c_BFs8i_BFs8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFs8i) C1{ Fc:8 Fi:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFs8i, BFu8c_BFs8i_BFs8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFs8ll) C1{ Fc:8 Fi:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFs8ll, BFu8c_BFs8i_BFs8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFs8s) C1{ Fc:8 Fi:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFs8s, BFu8c_BFs8i_BFs8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFu8c) C1{ Fc:8 Fi:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFu8c, BFu8c_BFs8i_BFs8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFu8i) C1{ Fc:8 Fi:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFu8i, BFu8c_BFs8i_BFs8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFu8ll) C1{ Fc:8 Fi:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFu8ll, BFu8c_BFs8i_BFs8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8i_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8i_BFu8s) C1{ Fc:8 Fi:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8i_BFu8s, BFu8c_BFs8i_BFs8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll) C1{ Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll, BFu8c_BFs8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFs8c) C1{ Fc:8 Fi:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFs8c, BFu8c_BFs8i_BFs8ll_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFs8i) C1{ Fc:8 Fi:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFs8i, BFu8c_BFs8i_BFs8ll_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFs8ll) C1{ Fc:8 Fi:8 FL:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFs8ll, BFu8c_BFs8i_BFs8ll_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFs8s) C1{ Fc:8 Fi:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFs8s, BFu8c_BFs8i_BFs8ll_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFu8c) C1{ Fc:8 Fi:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFu8c, BFu8c_BFs8i_BFs8ll_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFu8i) C1{ Fc:8 Fi:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFu8i, BFu8c_BFs8i_BFs8ll_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFu8ll) C1{ Fc:8 Fi:8 FL:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFu8ll, BFu8c_BFs8i_BFs8ll_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8ll_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed __tsi64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8ll_BFu8s) C1{ Fc:8 Fi:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8ll_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8ll_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8ll_BFu8s, BFu8c_BFs8i_BFs8ll_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s) C1{ Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s, BFu8c_BFs8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFs8c) C1{ Fc:8 Fi:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8s_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFs8c, BFu8c_BFs8i_BFs8s_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFs8i) C1{ Fc:8 Fi:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8s_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFs8i, BFu8c_BFs8i_BFs8s_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFs8ll) C1{ Fc:8 Fi:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8s_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFs8ll, BFu8c_BFs8i_BFs8s_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFs8s) C1{ Fc:8 Fi:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8s_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFs8s, BFu8c_BFs8i_BFs8s_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFu8c) C1{ Fc:8 Fi:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8i_BFs8s_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFu8c, BFu8c_BFs8i_BFs8s_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFu8i) C1{ Fc:8 Fi:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8i_BFs8s_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFu8i, BFu8c_BFs8i_BFs8s_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFu8ll) C1{ Fc:8 Fi:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8i_BFs8s_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFs8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFs8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFu8ll, BFu8c_BFs8i_BFs8s_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFs8s_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  signed short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFs8s_BFu8s) C1{ Fc:8 Fi:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8i_BFs8s_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFs8s_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFs8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFs8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFs8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFs8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFs8s_BFu8s, BFu8c_BFs8i_BFs8s_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c) C1{ Fc:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c, BFu8c_BFs8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFs8c) C1{ Fc:8 Fi:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFs8c, BFu8c_BFs8i_BFu8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFs8i) C1{ Fc:8 Fi:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFs8i, BFu8c_BFs8i_BFu8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFs8ll) C1{ Fc:8 Fi:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFs8ll, BFu8c_BFs8i_BFu8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFs8s) C1{ Fc:8 Fi:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFs8s, BFu8c_BFs8i_BFu8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFu8c) C1{ Fc:8 Fi:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFu8c, BFu8c_BFs8i_BFu8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFu8i) C1{ Fc:8 Fi:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFu8i, BFu8c_BFs8i_BFu8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFu8ll) C1{ Fc:8 Fi:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFu8ll, BFu8c_BFs8i_BFu8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8c_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8c_BFu8s) C1{ Fc:8 Fi:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8c_BFu8s, BFu8c_BFs8i_BFu8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i) C1{ Fc:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i, BFu8c_BFs8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFs8c) C1{ Fc:8 Fi:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFs8c, BFu8c_BFs8i_BFu8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFs8i) C1{ Fc:8 Fi:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFs8i, BFu8c_BFs8i_BFu8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFs8ll) C1{ Fc:8 Fi:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFs8ll, BFu8c_BFs8i_BFu8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFs8s) C1{ Fc:8 Fi:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFs8s, BFu8c_BFs8i_BFu8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFu8c) C1{ Fc:8 Fi:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFu8c, BFu8c_BFs8i_BFu8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFu8i) C1{ Fc:8 Fi:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFu8i, BFu8c_BFs8i_BFu8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFu8ll) C1{ Fc:8 Fi:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFu8ll, BFu8c_BFs8i_BFu8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8i_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8i_BFu8s) C1{ Fc:8 Fi:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8i_BFu8s, BFu8c_BFs8i_BFu8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll) C1{ Fc:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll, BFu8c_BFs8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFs8c) C1{ Fc:8 Fi:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFs8c, BFu8c_BFs8i_BFu8ll_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFs8i) C1{ Fc:8 Fi:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFs8i, BFu8c_BFs8i_BFu8ll_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFs8ll) C1{ Fc:8 Fi:8 FL:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFs8ll, BFu8c_BFs8i_BFu8ll_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFs8s) C1{ Fc:8 Fi:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFs8s, BFu8c_BFs8i_BFu8ll_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFu8c) C1{ Fc:8 Fi:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFu8c, BFu8c_BFs8i_BFu8ll_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFu8i) C1{ Fc:8 Fi:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFu8i, BFu8c_BFs8i_BFu8ll_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFu8ll) C1{ Fc:8 Fi:8 FL:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFu8ll, BFu8c_BFs8i_BFu8ll_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8ll_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  __tsu64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8ll_BFu8s) C1{ Fc:8 Fi:8 FL:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8ll_BFu8s, BFu8c_BFs8i_BFu8ll_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s) C1{ Fc:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s, BFu8c_BFs8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFs8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFs8c) C1{ Fc:8 Fi:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8s_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFs8c, BFu8c_BFs8i_BFu8s_BFs8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFs8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFs8i) C1{ Fc:8 Fi:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8s_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFs8i, BFu8c_BFs8i_BFu8s_BFs8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFs8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFs8ll) C1{ Fc:8 Fi:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8s_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFs8ll, BFu8c_BFs8i_BFu8s_BFs8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFs8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFs8s) C1{ Fc:8 Fi:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8s_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFs8s, BFu8c_BFs8i_BFu8s_BFs8s)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFu8c  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFu8c) C1{ Fc:8 Fi:8 Fs:8 Fc:8}



static void Test_BFu8c_BFs8i_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFu8c, BFu8c_BFs8i_BFu8s_BFu8c)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFu8i  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFu8i) C1{ Fc:8 Fi:8 Fs:8 Fi:8}



static void Test_BFu8c_BFs8i_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFu8i, BFu8c_BFs8i_BFu8s_BFu8i)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFu8ll  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFu8ll) C1{ Fc:8 Fi:8 Fs:8 FL:8}



static void Test_BFu8c_BFs8i_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8i_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8i_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFu8ll, BFu8c_BFs8i_BFu8s_BFu8ll)
//============================================================================


struct  BFu8c_BFs8i_BFu8s_BFu8s  {
  unsigned char v1:8;
  signed int v2:8;
  unsigned short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8i_BFu8s_BFu8s) C1{ Fc:8 Fi:8 Fs:8 Fs:8}



static void Test_BFu8c_BFs8i_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8i_BFu8s_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8i_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFs8i_BFu8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFs8i_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8i_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8i_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8i_BFu8s_BFu8s, BFu8c_BFs8i_BFu8s_BFu8s)
//============================================================================


struct  BFu8c_BFs8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
};
//SIG(1 BFu8c_BFs8ll) C1{ Fc:8 FL:8}



static void Test_BFu8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll, BFu8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c) C1{ Fc:8 FL:8 Fc:8}



static void Test_BFu8c_BFs8ll_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c, BFu8c_BFs8ll_BFs8c)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFs8c  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFs8c) C1{ Fc:8 FL:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFs8c, BFu8c_BFs8ll_BFs8c_BFs8c)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFs8i  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFs8i) C1{ Fc:8 FL:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFs8i, BFu8c_BFs8ll_BFs8c_BFs8i)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFs8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFs8ll) C1{ Fc:8 FL:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFs8ll, BFu8c_BFs8ll_BFs8c_BFs8ll)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFs8s  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFs8s) C1{ Fc:8 FL:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFs8s, BFu8c_BFs8ll_BFs8c_BFs8s)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFu8c  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFu8c) C1{ Fc:8 FL:8 Fc:8 Fc:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFu8c, BFu8c_BFs8ll_BFs8c_BFu8c)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFu8i  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFu8i) C1{ Fc:8 FL:8 Fc:8 Fi:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFu8i, BFu8c_BFs8ll_BFs8c_BFu8i)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFu8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFu8ll) C1{ Fc:8 FL:8 Fc:8 FL:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFu8ll, BFu8c_BFs8ll_BFs8c_BFu8ll)
//============================================================================


struct  BFu8c_BFs8ll_BFs8c_BFu8s  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8c_BFu8s) C1{ Fc:8 FL:8 Fc:8 Fs:8}



static void Test_BFu8c_BFs8ll_BFs8c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8c_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8c_BFu8s, BFu8c_BFs8ll_BFs8c_BFu8s)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i) C1{ Fc:8 FL:8 Fi:8}



static void Test_BFu8c_BFs8ll_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i, BFu8c_BFs8ll_BFs8i)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFs8c  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  signed char v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFs8c) C1{ Fc:8 FL:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFs8c()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFs8c");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFs8c, BFu8c_BFs8ll_BFs8i_BFs8c)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFs8i  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  signed int v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFs8i) C1{ Fc:8 FL:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFs8i()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFs8i");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFs8i, BFu8c_BFs8ll_BFs8i_BFs8i)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFs8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFs8ll) C1{ Fc:8 FL:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFs8ll, BFu8c_BFs8ll_BFs8i_BFs8ll)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFs8s  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  signed short v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFs8s) C1{ Fc:8 FL:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFs8s()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFs8s");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFs8s, BFu8c_BFs8ll_BFs8i_BFs8s)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFu8c  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFu8c) C1{ Fc:8 FL:8 Fi:8 Fc:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFu8c");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFu8c, BFu8c_BFs8ll_BFs8i_BFu8c)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFu8i  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFu8i) C1{ Fc:8 FL:8 Fi:8 Fi:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFu8i");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFu8i, BFu8c_BFs8ll_BFs8i_BFu8i)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFu8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFu8ll) C1{ Fc:8 FL:8 Fi:8 FL:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFu8ll");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFu8ll, BFu8c_BFs8ll_BFs8i_BFu8ll)
//============================================================================


struct  BFu8c_BFs8ll_BFs8i_BFu8s  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8i_BFu8s) C1{ Fc:8 FL:8 Fi:8 Fs:8}



static void Test_BFu8c_BFs8ll_BFs8i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8i_BFu8s");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFu8c_BFs8ll_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8i_BFu8s, BFu8c_BFs8ll_BFs8i_BFu8s)
//============================================================================


struct  BFu8c_BFs8ll_BFs8ll  {
  unsigned char v1:8;
  signed __tsi64 v2:8;
  signed __tsi64 v3:8;
};
//SIG(1 BFu8c_BFs8ll_BFs8ll) C1{ Fc:8 FL:8 FL:8}



static void Test_BFu8c_BFs8ll_BFs8ll()
{
  {
    init_simple_test("BFu8c_BFs8ll_BFs8ll");
    static STRUCT_IF_C BFu8c_BFs8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFs8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFs8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu8c_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFu8c_BFs8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu8c_BFs8ll_BFs8ll, BFu8c_BFs8ll_BFs8ll)
//============================================================================

