// 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  BFu7i_BFu1s_Ul  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu1s_Ul) C1{ Fi:7 Fs:1 FL}



static void Test_BFu7i_BFu1s_Ul()
{
  {
    init_simple_test("BFu7i_BFu1s_Ul");
    static STRUCT_IF_C BFu7i_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Ul, BFu7i_BFu1s_Ul)
//============================================================================


struct  BFu7i_BFu1s_Us  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu1s_Us) C1{ Fi:7 Fs:1 Fs}



static void Test_BFu7i_BFu1s_Us()
{
  {
    init_simple_test("BFu7i_BFu1s_Us");
    static STRUCT_IF_C BFu7i_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Us, BFu7i_BFu1s_Us)
//============================================================================


struct  BFu7i_BFu1s_Vp  {
  unsigned int v1:7;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu7i_BFu1s_Vp) C1{ Fi:7 Fs:1 Fp}



static void Test_BFu7i_BFu1s_Vp()
{
  {
    init_simple_test("BFu7i_BFu1s_Vp");
    static STRUCT_IF_C BFu7i_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Vp, BFu7i_BFu1s_Vp)
//============================================================================


struct  BFu7i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu7i_BFu31i) C1{ Fi:7 Fi:31}



static void Test_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i, BFu7i_BFu31i)
//============================================================================


struct  BFu7i_BFu31i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu31i_BFu15i) C1{ Fi:7 Fi:31 Fi:15}



static void Test_BFu7i_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu15i, BFu7i_BFu31i_BFu15i)
//============================================================================


struct  BFu7i_BFu31i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu31i_BFu15ll) C1{ Fi:7 Fi:31 FL:15}



static void Test_BFu7i_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu7i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu7i_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu15ll, BFu7i_BFu31i_BFu15ll)
//============================================================================


struct  BFu7i_BFu31i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu31i_BFu15s) C1{ Fi:7 Fi:31 Fs:15}



static void Test_BFu7i_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu15s, BFu7i_BFu31i_BFu15s)
//============================================================================


struct  BFu7i_BFu31i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu31i_BFu16i) C1{ Fi:7 Fi:31 Fi:16}



static void Test_BFu7i_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu16i, BFu7i_BFu31i_BFu16i)
//============================================================================


struct  BFu7i_BFu31i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu31i_BFu16ll) C1{ Fi:7 Fi:31 FL:16}



static void Test_BFu7i_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu7i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu7i_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu16ll, BFu7i_BFu31i_BFu16ll)
//============================================================================


struct  BFu7i_BFu31i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu31i_BFu16s) C1{ Fi:7 Fi:31 Fs:16}



static void Test_BFu7i_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu16s, BFu7i_BFu31i_BFu16s)
//============================================================================


struct  BFu7i_BFu31i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu31i_BFu17i) C1{ Fi:7 Fi:31 Fi:17}



static void Test_BFu7i_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu17i, BFu7i_BFu31i_BFu17i)
//============================================================================


struct  BFu7i_BFu31i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu31i_BFu17ll) C1{ Fi:7 Fi:31 FL:17}



static void Test_BFu7i_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu7i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu7i_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu17ll, BFu7i_BFu31i_BFu17ll)
//============================================================================


struct  BFu7i_BFu31i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu31i_BFu1c) C1{ Fi:7 Fi:31 Fc:1}



static void Test_BFu7i_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7i_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu1c, BFu7i_BFu31i_BFu1c)
//============================================================================


struct  BFu7i_BFu31i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu31i_BFu1i) C1{ Fi:7 Fi:31 Fi:1}



static void Test_BFu7i_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7i_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu1i, BFu7i_BFu31i_BFu1i)
//============================================================================


struct  BFu7i_BFu31i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu31i_BFu1ll) C1{ Fi:7 Fi:31 FL:1}



static void Test_BFu7i_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7i_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu1ll, BFu7i_BFu31i_BFu1ll)
//============================================================================


struct  BFu7i_BFu31i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu31i_BFu1s) C1{ Fi:7 Fi:31 Fs:1}



static void Test_BFu7i_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7i_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu1s, BFu7i_BFu31i_BFu1s)
//============================================================================


struct  BFu7i_BFu31i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu31i_BFu31i) C1{ Fi:7 Fi:31 Fi:31}



static void Test_BFu7i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu31i, BFu7i_BFu31i_BFu31i)
//============================================================================


struct  BFu7i_BFu31i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu31i_BFu31ll) C1{ Fi:7 Fi:31 FL:31}



static void Test_BFu7i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu7i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu31ll, BFu7i_BFu31i_BFu31ll)
//============================================================================


struct  BFu7i_BFu31i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu31i_BFu32i) C1{ Fi:7 Fi:31 Fi:32}



static void Test_BFu7i_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu32i, BFu7i_BFu31i_BFu32i)
//============================================================================


struct  BFu7i_BFu31i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu31i_BFu32ll) C1{ Fi:7 Fi:31 FL:32}



static void Test_BFu7i_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu7i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7i_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu32ll, BFu7i_BFu31i_BFu32ll)
//============================================================================


struct  BFu7i_BFu31i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu31i_BFu33) C1{ Fi:7 Fi:31 FL:33}



static void Test_BFu7i_BFu31i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu33");
    static STRUCT_IF_C BFu7i_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu7i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7i_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu33, BFu7i_BFu31i_BFu33)
//============================================================================


struct  BFu7i_BFu31i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu31i_BFu7c) C1{ Fi:7 Fi:31 Fc:7}



static void Test_BFu7i_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu7c, BFu7i_BFu31i_BFu7c)
//============================================================================


struct  BFu7i_BFu31i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu31i_BFu7i) C1{ Fi:7 Fi:31 Fi:7}



static void Test_BFu7i_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu7i, BFu7i_BFu31i_BFu7i)
//============================================================================


struct  BFu7i_BFu31i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu31i_BFu7ll) C1{ Fi:7 Fi:31 FL:7}



static void Test_BFu7i_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu7i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu7ll, BFu7i_BFu31i_BFu7ll)
//============================================================================


struct  BFu7i_BFu31i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu31i_BFu7s) C1{ Fi:7 Fi:31 Fs:7}



static void Test_BFu7i_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu7s, BFu7i_BFu31i_BFu7s)
//============================================================================


struct  BFu7i_BFu31i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu31i_BFu8c) C1{ Fi:7 Fi:31 Fc:8}



static void Test_BFu7i_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu8c, BFu7i_BFu31i_BFu8c)
//============================================================================


struct  BFu7i_BFu31i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu31i_BFu8i) C1{ Fi:7 Fi:31 Fi:8}



static void Test_BFu7i_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu8i, BFu7i_BFu31i_BFu8i)
//============================================================================


struct  BFu7i_BFu31i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu31i_BFu8ll) C1{ Fi:7 Fi:31 FL:8}



static void Test_BFu7i_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu7i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu7i_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu8ll, BFu7i_BFu31i_BFu8ll)
//============================================================================


struct  BFu7i_BFu31i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu31i_BFu8s) C1{ Fi:7 Fi:31 Fs:8}



static void Test_BFu7i_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu8s, BFu7i_BFu31i_BFu8s)
//============================================================================


struct  BFu7i_BFu31i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu31i_BFu9i) C1{ Fi:7 Fi:31 Fi:9}



static void Test_BFu7i_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu9i, BFu7i_BFu31i_BFu9i)
//============================================================================


struct  BFu7i_BFu31i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu31i_BFu9ll) C1{ Fi:7 Fi:31 FL:9}



static void Test_BFu7i_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu7i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu7i_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu9ll, BFu7i_BFu31i_BFu9ll)
//============================================================================


struct  BFu7i_BFu31i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu31i_BFu9s) C1{ Fi:7 Fi:31 Fs:9}



static void Test_BFu7i_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_BFu9s, BFu7i_BFu31i_BFu9s)
//============================================================================


struct  BFu7i_BFu31i_C  {
  unsigned int v1:7;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu7i_BFu31i_C) C1{ Fi:7 Fi:31 Fc}



static void Test_BFu7i_BFu31i_C()
{
  {
    init_simple_test("BFu7i_BFu31i_C");
    static STRUCT_IF_C BFu7i_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_C, BFu7i_BFu31i_C)
//============================================================================


struct  BFu7i_BFu31i_D  {
  unsigned int v1:7;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu7i_BFu31i_D) C1{ Fi:7 Fi:31 FL}



static void Test_BFu7i_BFu31i_D()
{
  {
    init_simple_test("BFu7i_BFu31i_D");
    static STRUCT_IF_C BFu7i_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_D, BFu7i_BFu31i_D)
//============================================================================


struct  BFu7i_BFu31i_F  {
  unsigned int v1:7;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu7i_BFu31i_F) C1{ Fi:7 Fi:31 Fi}



static void Test_BFu7i_BFu31i_F()
{
  {
    init_simple_test("BFu7i_BFu31i_F");
    static STRUCT_IF_C BFu7i_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_F, BFu7i_BFu31i_F)
//============================================================================


struct  BFu7i_BFu31i_I  {
  unsigned int v1:7;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu7i_BFu31i_I) C1{ Fi:7 Fi:31 Fi}



static void Test_BFu7i_BFu31i_I()
{
  {
    init_simple_test("BFu7i_BFu31i_I");
    static STRUCT_IF_C BFu7i_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_I, BFu7i_BFu31i_I)
//============================================================================


struct  BFu7i_BFu31i_Ip  {
  unsigned int v1:7;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu7i_BFu31i_Ip) C1{ Fi:7 Fi:31 Fp}



static void Test_BFu7i_BFu31i_Ip()
{
  {
    init_simple_test("BFu7i_BFu31i_Ip");
    static STRUCT_IF_C BFu7i_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Ip, BFu7i_BFu31i_Ip)
//============================================================================


struct  BFu7i_BFu31i_L  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu31i_L) C1{ Fi:7 Fi:31 FL}



static void Test_BFu7i_BFu31i_L()
{
  {
    init_simple_test("BFu7i_BFu31i_L");
    static STRUCT_IF_C BFu7i_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_L, BFu7i_BFu31i_L)
//============================================================================


struct  BFu7i_BFu31i_S  {
  unsigned int v1:7;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu7i_BFu31i_S) C1{ Fi:7 Fi:31 Fs}



static void Test_BFu7i_BFu31i_S()
{
  {
    init_simple_test("BFu7i_BFu31i_S");
    static STRUCT_IF_C BFu7i_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_S, BFu7i_BFu31i_S)
//============================================================================


struct  BFu7i_BFu31i_Uc  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu31i_Uc) C1{ Fi:7 Fi:31 Fc}



static void Test_BFu7i_BFu31i_Uc()
{
  {
    init_simple_test("BFu7i_BFu31i_Uc");
    static STRUCT_IF_C BFu7i_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Uc, BFu7i_BFu31i_Uc)
//============================================================================


struct  BFu7i_BFu31i_Ui  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu31i_Ui) C1{ Fi:7 Fi:31 Fi}



static void Test_BFu7i_BFu31i_Ui()
{
  {
    init_simple_test("BFu7i_BFu31i_Ui");
    static STRUCT_IF_C BFu7i_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Ui, BFu7i_BFu31i_Ui)
//============================================================================


struct  BFu7i_BFu31i_Ul  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu31i_Ul) C1{ Fi:7 Fi:31 FL}



static void Test_BFu7i_BFu31i_Ul()
{
  {
    init_simple_test("BFu7i_BFu31i_Ul");
    static STRUCT_IF_C BFu7i_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Ul, BFu7i_BFu31i_Ul)
//============================================================================


struct  BFu7i_BFu31i_Us  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu31i_Us) C1{ Fi:7 Fi:31 Fs}



static void Test_BFu7i_BFu31i_Us()
{
  {
    init_simple_test("BFu7i_BFu31i_Us");
    static STRUCT_IF_C BFu7i_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Us, BFu7i_BFu31i_Us)
//============================================================================


struct  BFu7i_BFu31i_Vp  {
  unsigned int v1:7;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu7i_BFu31i_Vp) C1{ Fi:7 Fi:31 Fp}



static void Test_BFu7i_BFu31i_Vp()
{
  {
    init_simple_test("BFu7i_BFu31i_Vp");
    static STRUCT_IF_C BFu7i_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31i_Vp, BFu7i_BFu31i_Vp)
//============================================================================


struct  BFu7i_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu7i_BFu31ll) C1{ Fi:7 FL:31}



static void Test_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll, BFu7i_BFu31ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu31ll_BFu15i) C1{ Fi:7 FL:31 Fi:15}



static void Test_BFu7i_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu15i, BFu7i_BFu31ll_BFu15i)
//============================================================================


struct  BFu7i_BFu31ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu31ll_BFu15ll) C1{ Fi:7 FL:31 FL:15}



static void Test_BFu7i_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu15ll, BFu7i_BFu31ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu31ll_BFu15s) C1{ Fi:7 FL:31 Fs:15}



static void Test_BFu7i_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu15s, BFu7i_BFu31ll_BFu15s)
//============================================================================


struct  BFu7i_BFu31ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu31ll_BFu16i) C1{ Fi:7 FL:31 Fi:16}



static void Test_BFu7i_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu16i, BFu7i_BFu31ll_BFu16i)
//============================================================================


struct  BFu7i_BFu31ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu31ll_BFu16ll) C1{ Fi:7 FL:31 FL:16}



static void Test_BFu7i_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu16ll, BFu7i_BFu31ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu31ll_BFu16s) C1{ Fi:7 FL:31 Fs:16}



static void Test_BFu7i_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu16s, BFu7i_BFu31ll_BFu16s)
//============================================================================


struct  BFu7i_BFu31ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu31ll_BFu17i) C1{ Fi:7 FL:31 Fi:17}



static void Test_BFu7i_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu17i, BFu7i_BFu31ll_BFu17i)
//============================================================================


struct  BFu7i_BFu31ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu31ll_BFu17ll) C1{ Fi:7 FL:31 FL:17}



static void Test_BFu7i_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu17ll, BFu7i_BFu31ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu31ll_BFu1c) C1{ Fi:7 FL:31 Fc:1}



static void Test_BFu7i_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7i_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu1c, BFu7i_BFu31ll_BFu1c)
//============================================================================


struct  BFu7i_BFu31ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu31ll_BFu1i) C1{ Fi:7 FL:31 Fi:1}



static void Test_BFu7i_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7i_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu1i, BFu7i_BFu31ll_BFu1i)
//============================================================================


struct  BFu7i_BFu31ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu31ll_BFu1ll) C1{ Fi:7 FL:31 FL:1}



static void Test_BFu7i_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7i_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu1ll, BFu7i_BFu31ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu31ll_BFu1s) C1{ Fi:7 FL:31 Fs:1}



static void Test_BFu7i_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7i_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu1s, BFu7i_BFu31ll_BFu1s)
//============================================================================


struct  BFu7i_BFu31ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu31ll_BFu31i) C1{ Fi:7 FL:31 Fi:31}



static void Test_BFu7i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu31i, BFu7i_BFu31ll_BFu31i)
//============================================================================


struct  BFu7i_BFu31ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu31ll_BFu31ll) C1{ Fi:7 FL:31 FL:31}



static void Test_BFu7i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, 1, "BFu7i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu31ll, BFu7i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu31ll_BFu32i) C1{ Fi:7 FL:31 Fi:32}



static void Test_BFu7i_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu32i, BFu7i_BFu31ll_BFu32i)
//============================================================================


struct  BFu7i_BFu31ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu31ll_BFu32ll) C1{ Fi:7 FL:31 FL:32}



static void Test_BFu7i_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, 1, "BFu7i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu7i_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu32ll, BFu7i_BFu31ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu31ll_BFu33) C1{ Fi:7 FL:31 FL:33}



static void Test_BFu7i_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, 1, "BFu7i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu7i_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu33, BFu7i_BFu31ll_BFu33)
//============================================================================


struct  BFu7i_BFu31ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu31ll_BFu7c) C1{ Fi:7 FL:31 Fc:7}



static void Test_BFu7i_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu7c, BFu7i_BFu31ll_BFu7c)
//============================================================================


struct  BFu7i_BFu31ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu31ll_BFu7i) C1{ Fi:7 FL:31 Fi:7}



static void Test_BFu7i_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu7i, BFu7i_BFu31ll_BFu7i)
//============================================================================


struct  BFu7i_BFu31ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu31ll_BFu7ll) C1{ Fi:7 FL:31 FL:7}



static void Test_BFu7i_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu7ll, BFu7i_BFu31ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu31ll_BFu7s) C1{ Fi:7 FL:31 Fs:7}



static void Test_BFu7i_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu7s, BFu7i_BFu31ll_BFu7s)
//============================================================================


struct  BFu7i_BFu31ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu31ll_BFu8c) C1{ Fi:7 FL:31 Fc:8}



static void Test_BFu7i_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu8c, BFu7i_BFu31ll_BFu8c)
//============================================================================


struct  BFu7i_BFu31ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu31ll_BFu8i) C1{ Fi:7 FL:31 Fi:8}



static void Test_BFu7i_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu8i, BFu7i_BFu31ll_BFu8i)
//============================================================================


struct  BFu7i_BFu31ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu31ll_BFu8ll) C1{ Fi:7 FL:31 FL:8}



static void Test_BFu7i_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu8ll, BFu7i_BFu31ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu31ll_BFu8s) C1{ Fi:7 FL:31 Fs:8}



static void Test_BFu7i_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu8s, BFu7i_BFu31ll_BFu8s)
//============================================================================


struct  BFu7i_BFu31ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu31ll_BFu9i) C1{ Fi:7 FL:31 Fi:9}



static void Test_BFu7i_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu9i, BFu7i_BFu31ll_BFu9i)
//============================================================================


struct  BFu7i_BFu31ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu31ll_BFu9ll) C1{ Fi:7 FL:31 FL:9}



static void Test_BFu7i_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu9ll, BFu7i_BFu31ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu31ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu31ll_BFu9s) C1{ Fi:7 FL:31 Fs:9}



static void Test_BFu7i_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_BFu9s, BFu7i_BFu31ll_BFu9s)
//============================================================================


struct  BFu7i_BFu31ll_C  {
  unsigned int v1:7;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu7i_BFu31ll_C) C1{ Fi:7 FL:31 Fc}



static void Test_BFu7i_BFu31ll_C()
{
  {
    init_simple_test("BFu7i_BFu31ll_C");
    static STRUCT_IF_C BFu7i_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_C");
    check_field_offset(lv, v3, 5, "BFu7i_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_C, BFu7i_BFu31ll_C)
//============================================================================


struct  BFu7i_BFu31ll_D  {
  unsigned int v1:7;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu7i_BFu31ll_D) C1{ Fi:7 FL:31 FL}



static void Test_BFu7i_BFu31ll_D()
{
  {
    init_simple_test("BFu7i_BFu31ll_D");
    static STRUCT_IF_C BFu7i_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_D, BFu7i_BFu31ll_D)
//============================================================================


struct  BFu7i_BFu31ll_F  {
  unsigned int v1:7;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu7i_BFu31ll_F) C1{ Fi:7 FL:31 Fi}



static void Test_BFu7i_BFu31ll_F()
{
  {
    init_simple_test("BFu7i_BFu31ll_F");
    static STRUCT_IF_C BFu7i_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_F, BFu7i_BFu31ll_F)
//============================================================================


struct  BFu7i_BFu31ll_I  {
  unsigned int v1:7;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu7i_BFu31ll_I) C1{ Fi:7 FL:31 Fi}



static void Test_BFu7i_BFu31ll_I()
{
  {
    init_simple_test("BFu7i_BFu31ll_I");
    static STRUCT_IF_C BFu7i_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_I, BFu7i_BFu31ll_I)
//============================================================================


struct  BFu7i_BFu31ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu7i_BFu31ll_Ip) C1{ Fi:7 FL:31 Fp}



static void Test_BFu7i_BFu31ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu31ll_Ip");
    static STRUCT_IF_C BFu7i_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Ip, BFu7i_BFu31ll_Ip)
//============================================================================


struct  BFu7i_BFu31ll_L  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu31ll_L) C1{ Fi:7 FL:31 FL}



static void Test_BFu7i_BFu31ll_L()
{
  {
    init_simple_test("BFu7i_BFu31ll_L");
    static STRUCT_IF_C BFu7i_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_L, BFu7i_BFu31ll_L)
//============================================================================


struct  BFu7i_BFu31ll_S  {
  unsigned int v1:7;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu7i_BFu31ll_S) C1{ Fi:7 FL:31 Fs}



static void Test_BFu7i_BFu31ll_S()
{
  {
    init_simple_test("BFu7i_BFu31ll_S");
    static STRUCT_IF_C BFu7i_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu7i_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_S, BFu7i_BFu31ll_S)
//============================================================================


struct  BFu7i_BFu31ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu31ll_Uc) C1{ Fi:7 FL:31 Fc}



static void Test_BFu7i_BFu31ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu31ll_Uc");
    static STRUCT_IF_C BFu7i_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7i_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Uc, BFu7i_BFu31ll_Uc)
//============================================================================


struct  BFu7i_BFu31ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu31ll_Ui) C1{ Fi:7 FL:31 Fi}



static void Test_BFu7i_BFu31ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu31ll_Ui");
    static STRUCT_IF_C BFu7i_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Ui, BFu7i_BFu31ll_Ui)
//============================================================================


struct  BFu7i_BFu31ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu31ll_Ul) C1{ Fi:7 FL:31 FL}



static void Test_BFu7i_BFu31ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu31ll_Ul");
    static STRUCT_IF_C BFu7i_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Ul, BFu7i_BFu31ll_Ul)
//============================================================================


struct  BFu7i_BFu31ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu31ll_Us) C1{ Fi:7 FL:31 Fs}



static void Test_BFu7i_BFu31ll_Us()
{
  {
    init_simple_test("BFu7i_BFu31ll_Us");
    static STRUCT_IF_C BFu7i_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu7i_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Us, BFu7i_BFu31ll_Us)
//============================================================================


struct  BFu7i_BFu31ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu7i_BFu31ll_Vp) C1{ Fi:7 FL:31 Fp}



static void Test_BFu7i_BFu31ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu31ll_Vp");
    static STRUCT_IF_C BFu7i_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7i_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu31ll_Vp, BFu7i_BFu31ll_Vp)
//============================================================================


struct  BFu7i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu7i_BFu32i) C1{ Fi:7 Fi:32}



static void Test_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i, BFu7i_BFu32i)
//============================================================================


struct  BFu7i_BFu32i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu32i_BFu15i) C1{ Fi:7 Fi:32 Fi:15}



static void Test_BFu7i_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu15i, BFu7i_BFu32i_BFu15i)
//============================================================================


struct  BFu7i_BFu32i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu32i_BFu15ll) C1{ Fi:7 Fi:32 FL:15}



static void Test_BFu7i_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu15ll, BFu7i_BFu32i_BFu15ll)
//============================================================================


struct  BFu7i_BFu32i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu32i_BFu15s) C1{ Fi:7 Fi:32 Fs:15}



static void Test_BFu7i_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu15s, BFu7i_BFu32i_BFu15s)
//============================================================================


struct  BFu7i_BFu32i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu32i_BFu16i) C1{ Fi:7 Fi:32 Fi:16}



static void Test_BFu7i_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu16i, BFu7i_BFu32i_BFu16i)
//============================================================================


struct  BFu7i_BFu32i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu32i_BFu16ll) C1{ Fi:7 Fi:32 FL:16}



static void Test_BFu7i_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu16ll, BFu7i_BFu32i_BFu16ll)
//============================================================================


struct  BFu7i_BFu32i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu32i_BFu16s) C1{ Fi:7 Fi:32 Fs:16}



static void Test_BFu7i_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu16s, BFu7i_BFu32i_BFu16s)
//============================================================================


struct  BFu7i_BFu32i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu32i_BFu17i) C1{ Fi:7 Fi:32 Fi:17}



static void Test_BFu7i_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu17i, BFu7i_BFu32i_BFu17i)
//============================================================================


struct  BFu7i_BFu32i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu32i_BFu17ll) C1{ Fi:7 Fi:32 FL:17}



static void Test_BFu7i_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu17ll, BFu7i_BFu32i_BFu17ll)
//============================================================================


struct  BFu7i_BFu32i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu32i_BFu1c) C1{ Fi:7 Fi:32 Fc:1}



static void Test_BFu7i_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu1c, BFu7i_BFu32i_BFu1c)
//============================================================================


struct  BFu7i_BFu32i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu32i_BFu1i) C1{ Fi:7 Fi:32 Fi:1}



static void Test_BFu7i_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu1i, BFu7i_BFu32i_BFu1i)
//============================================================================


struct  BFu7i_BFu32i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu32i_BFu1ll) C1{ Fi:7 Fi:32 FL:1}



static void Test_BFu7i_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu1ll, BFu7i_BFu32i_BFu1ll)
//============================================================================


struct  BFu7i_BFu32i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu32i_BFu1s) C1{ Fi:7 Fi:32 Fs:1}



static void Test_BFu7i_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu1s, BFu7i_BFu32i_BFu1s)
//============================================================================


struct  BFu7i_BFu32i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu32i_BFu31i) C1{ Fi:7 Fi:32 Fi:31}



static void Test_BFu7i_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu31i, BFu7i_BFu32i_BFu31i)
//============================================================================


struct  BFu7i_BFu32i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu32i_BFu31ll) C1{ Fi:7 Fi:32 FL:31}



static void Test_BFu7i_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu31ll, BFu7i_BFu32i_BFu31ll)
//============================================================================


struct  BFu7i_BFu32i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu32i_BFu32i) C1{ Fi:7 Fi:32 Fi:32}



static void Test_BFu7i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu32i, BFu7i_BFu32i_BFu32i)
//============================================================================


struct  BFu7i_BFu32i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu32i_BFu32ll) C1{ Fi:7 Fi:32 FL:32}



static void Test_BFu7i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu32ll, BFu7i_BFu32i_BFu32ll)
//============================================================================


struct  BFu7i_BFu32i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu32i_BFu33) C1{ Fi:7 Fi:32 FL:33}



static void Test_BFu7i_BFu32i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu33");
    static STRUCT_IF_C BFu7i_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu33, BFu7i_BFu32i_BFu33)
//============================================================================


struct  BFu7i_BFu32i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu32i_BFu7c) C1{ Fi:7 Fi:32 Fc:7}



static void Test_BFu7i_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu7c, BFu7i_BFu32i_BFu7c)
//============================================================================


struct  BFu7i_BFu32i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu32i_BFu7i) C1{ Fi:7 Fi:32 Fi:7}



static void Test_BFu7i_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu7i, BFu7i_BFu32i_BFu7i)
//============================================================================


struct  BFu7i_BFu32i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu32i_BFu7ll) C1{ Fi:7 Fi:32 FL:7}



static void Test_BFu7i_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu7ll, BFu7i_BFu32i_BFu7ll)
//============================================================================


struct  BFu7i_BFu32i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu32i_BFu7s) C1{ Fi:7 Fi:32 Fs:7}



static void Test_BFu7i_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu7s, BFu7i_BFu32i_BFu7s)
//============================================================================


struct  BFu7i_BFu32i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu32i_BFu8c) C1{ Fi:7 Fi:32 Fc:8}



static void Test_BFu7i_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu8c, BFu7i_BFu32i_BFu8c)
//============================================================================


struct  BFu7i_BFu32i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu32i_BFu8i) C1{ Fi:7 Fi:32 Fi:8}



static void Test_BFu7i_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu8i, BFu7i_BFu32i_BFu8i)
//============================================================================


struct  BFu7i_BFu32i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu32i_BFu8ll) C1{ Fi:7 Fi:32 FL:8}



static void Test_BFu7i_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu8ll, BFu7i_BFu32i_BFu8ll)
//============================================================================


struct  BFu7i_BFu32i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu32i_BFu8s) C1{ Fi:7 Fi:32 Fs:8}



static void Test_BFu7i_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu8s, BFu7i_BFu32i_BFu8s)
//============================================================================


struct  BFu7i_BFu32i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu32i_BFu9i) C1{ Fi:7 Fi:32 Fi:9}



static void Test_BFu7i_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu9i, BFu7i_BFu32i_BFu9i)
//============================================================================


struct  BFu7i_BFu32i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu32i_BFu9ll) C1{ Fi:7 Fi:32 FL:9}



static void Test_BFu7i_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu9ll, BFu7i_BFu32i_BFu9ll)
//============================================================================


struct  BFu7i_BFu32i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu32i_BFu9s) C1{ Fi:7 Fi:32 Fs:9}



static void Test_BFu7i_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_BFu9s, BFu7i_BFu32i_BFu9s)
//============================================================================


struct  BFu7i_BFu32i_C  {
  unsigned int v1:7;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu7i_BFu32i_C) C1{ Fi:7 Fi:32 Fc}



static void Test_BFu7i_BFu32i_C()
{
  {
    init_simple_test("BFu7i_BFu32i_C");
    static STRUCT_IF_C BFu7i_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_C, BFu7i_BFu32i_C)
//============================================================================


struct  BFu7i_BFu32i_D  {
  unsigned int v1:7;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu7i_BFu32i_D) C1{ Fi:7 Fi:32 FL}



static void Test_BFu7i_BFu32i_D()
{
  {
    init_simple_test("BFu7i_BFu32i_D");
    static STRUCT_IF_C BFu7i_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_D, BFu7i_BFu32i_D)
//============================================================================


struct  BFu7i_BFu32i_F  {
  unsigned int v1:7;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu7i_BFu32i_F) C1{ Fi:7 Fi:32 Fi}



static void Test_BFu7i_BFu32i_F()
{
  {
    init_simple_test("BFu7i_BFu32i_F");
    static STRUCT_IF_C BFu7i_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_F, BFu7i_BFu32i_F)
//============================================================================


struct  BFu7i_BFu32i_I  {
  unsigned int v1:7;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu7i_BFu32i_I) C1{ Fi:7 Fi:32 Fi}



static void Test_BFu7i_BFu32i_I()
{
  {
    init_simple_test("BFu7i_BFu32i_I");
    static STRUCT_IF_C BFu7i_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_I, BFu7i_BFu32i_I)
//============================================================================


struct  BFu7i_BFu32i_Ip  {
  unsigned int v1:7;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu7i_BFu32i_Ip) C1{ Fi:7 Fi:32 Fp}



static void Test_BFu7i_BFu32i_Ip()
{
  {
    init_simple_test("BFu7i_BFu32i_Ip");
    static STRUCT_IF_C BFu7i_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Ip, BFu7i_BFu32i_Ip)
//============================================================================


struct  BFu7i_BFu32i_L  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu32i_L) C1{ Fi:7 Fi:32 FL}



static void Test_BFu7i_BFu32i_L()
{
  {
    init_simple_test("BFu7i_BFu32i_L");
    static STRUCT_IF_C BFu7i_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_L, BFu7i_BFu32i_L)
//============================================================================


struct  BFu7i_BFu32i_S  {
  unsigned int v1:7;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu7i_BFu32i_S) C1{ Fi:7 Fi:32 Fs}



static void Test_BFu7i_BFu32i_S()
{
  {
    init_simple_test("BFu7i_BFu32i_S");
    static STRUCT_IF_C BFu7i_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_S, BFu7i_BFu32i_S)
//============================================================================


struct  BFu7i_BFu32i_Uc  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu32i_Uc) C1{ Fi:7 Fi:32 Fc}



static void Test_BFu7i_BFu32i_Uc()
{
  {
    init_simple_test("BFu7i_BFu32i_Uc");
    static STRUCT_IF_C BFu7i_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Uc, BFu7i_BFu32i_Uc)
//============================================================================


struct  BFu7i_BFu32i_Ui  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu32i_Ui) C1{ Fi:7 Fi:32 Fi}



static void Test_BFu7i_BFu32i_Ui()
{
  {
    init_simple_test("BFu7i_BFu32i_Ui");
    static STRUCT_IF_C BFu7i_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Ui, BFu7i_BFu32i_Ui)
//============================================================================


struct  BFu7i_BFu32i_Ul  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu32i_Ul) C1{ Fi:7 Fi:32 FL}



static void Test_BFu7i_BFu32i_Ul()
{
  {
    init_simple_test("BFu7i_BFu32i_Ul");
    static STRUCT_IF_C BFu7i_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Ul, BFu7i_BFu32i_Ul)
//============================================================================


struct  BFu7i_BFu32i_Us  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu32i_Us) C1{ Fi:7 Fi:32 Fs}



static void Test_BFu7i_BFu32i_Us()
{
  {
    init_simple_test("BFu7i_BFu32i_Us");
    static STRUCT_IF_C BFu7i_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Us, BFu7i_BFu32i_Us)
//============================================================================


struct  BFu7i_BFu32i_Vp  {
  unsigned int v1:7;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu7i_BFu32i_Vp) C1{ Fi:7 Fi:32 Fp}



static void Test_BFu7i_BFu32i_Vp()
{
  {
    init_simple_test("BFu7i_BFu32i_Vp");
    static STRUCT_IF_C BFu7i_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32i_Vp, BFu7i_BFu32i_Vp)
//============================================================================


struct  BFu7i_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu7i_BFu32ll) C1{ Fi:7 FL:32}



static void Test_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll, BFu7i_BFu32ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu32ll_BFu15i) C1{ Fi:7 FL:32 Fi:15}



static void Test_BFu7i_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu15i, BFu7i_BFu32ll_BFu15i)
//============================================================================


struct  BFu7i_BFu32ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu32ll_BFu15ll) C1{ Fi:7 FL:32 FL:15}



static void Test_BFu7i_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu15ll, BFu7i_BFu32ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu32ll_BFu15s) C1{ Fi:7 FL:32 Fs:15}



static void Test_BFu7i_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu15s, BFu7i_BFu32ll_BFu15s)
//============================================================================


struct  BFu7i_BFu32ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu32ll_BFu16i) C1{ Fi:7 FL:32 Fi:16}



static void Test_BFu7i_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu16i, BFu7i_BFu32ll_BFu16i)
//============================================================================


struct  BFu7i_BFu32ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu32ll_BFu16ll) C1{ Fi:7 FL:32 FL:16}



static void Test_BFu7i_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu16ll, BFu7i_BFu32ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu32ll_BFu16s) C1{ Fi:7 FL:32 Fs:16}



static void Test_BFu7i_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu16s, BFu7i_BFu32ll_BFu16s)
//============================================================================


struct  BFu7i_BFu32ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu32ll_BFu17i) C1{ Fi:7 FL:32 Fi:17}



static void Test_BFu7i_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu17i, BFu7i_BFu32ll_BFu17i)
//============================================================================


struct  BFu7i_BFu32ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu32ll_BFu17ll) C1{ Fi:7 FL:32 FL:17}



static void Test_BFu7i_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu17ll, BFu7i_BFu32ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu32ll_BFu1c) C1{ Fi:7 FL:32 Fc:1}



static void Test_BFu7i_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7i_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu1c, BFu7i_BFu32ll_BFu1c)
//============================================================================


struct  BFu7i_BFu32ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu32ll_BFu1i) C1{ Fi:7 FL:32 Fi:1}



static void Test_BFu7i_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7i_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu1i, BFu7i_BFu32ll_BFu1i)
//============================================================================


struct  BFu7i_BFu32ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu32ll_BFu1ll) C1{ Fi:7 FL:32 FL:1}



static void Test_BFu7i_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7i_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu1ll, BFu7i_BFu32ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu32ll_BFu1s) C1{ Fi:7 FL:32 Fs:1}



static void Test_BFu7i_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7i_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu1s, BFu7i_BFu32ll_BFu1s)
//============================================================================


struct  BFu7i_BFu32ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu32ll_BFu31i) C1{ Fi:7 FL:32 Fi:31}



static void Test_BFu7i_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu31i, BFu7i_BFu32ll_BFu31i)
//============================================================================


struct  BFu7i_BFu32ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu32ll_BFu31ll) C1{ Fi:7 FL:32 FL:31}



static void Test_BFu7i_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu7i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7i_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu31ll, BFu7i_BFu32ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu32ll_BFu32i) C1{ Fi:7 FL:32 Fi:32}



static void Test_BFu7i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu32i, BFu7i_BFu32ll_BFu32i)
//============================================================================


struct  BFu7i_BFu32ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu32ll_BFu32ll) C1{ Fi:7 FL:32 FL:32}



static void Test_BFu7i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu7i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu32ll, BFu7i_BFu32ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu32ll_BFu33) C1{ Fi:7 FL:32 FL:33}



static void Test_BFu7i_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu7i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7i_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu33, BFu7i_BFu32ll_BFu33)
//============================================================================


struct  BFu7i_BFu32ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu32ll_BFu7c) C1{ Fi:7 FL:32 Fc:7}



static void Test_BFu7i_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu7c, BFu7i_BFu32ll_BFu7c)
//============================================================================


struct  BFu7i_BFu32ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu32ll_BFu7i) C1{ Fi:7 FL:32 Fi:7}



static void Test_BFu7i_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu7i, BFu7i_BFu32ll_BFu7i)
//============================================================================


struct  BFu7i_BFu32ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu32ll_BFu7ll) C1{ Fi:7 FL:32 FL:7}



static void Test_BFu7i_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu7ll, BFu7i_BFu32ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu32ll_BFu7s) C1{ Fi:7 FL:32 Fs:7}



static void Test_BFu7i_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu7s, BFu7i_BFu32ll_BFu7s)
//============================================================================


struct  BFu7i_BFu32ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu32ll_BFu8c) C1{ Fi:7 FL:32 Fc:8}



static void Test_BFu7i_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu8c, BFu7i_BFu32ll_BFu8c)
//============================================================================


struct  BFu7i_BFu32ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu32ll_BFu8i) C1{ Fi:7 FL:32 Fi:8}



static void Test_BFu7i_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu8i, BFu7i_BFu32ll_BFu8i)
//============================================================================


struct  BFu7i_BFu32ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu32ll_BFu8ll) C1{ Fi:7 FL:32 FL:8}



static void Test_BFu7i_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu8ll, BFu7i_BFu32ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu32ll_BFu8s) C1{ Fi:7 FL:32 Fs:8}



static void Test_BFu7i_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu8s, BFu7i_BFu32ll_BFu8s)
//============================================================================


struct  BFu7i_BFu32ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu32ll_BFu9i) C1{ Fi:7 FL:32 Fi:9}



static void Test_BFu7i_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu9i, BFu7i_BFu32ll_BFu9i)
//============================================================================


struct  BFu7i_BFu32ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu32ll_BFu9ll) C1{ Fi:7 FL:32 FL:9}



static void Test_BFu7i_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu9ll, BFu7i_BFu32ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu32ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu32ll_BFu9s) C1{ Fi:7 FL:32 Fs:9}



static void Test_BFu7i_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_BFu9s, BFu7i_BFu32ll_BFu9s)
//============================================================================


struct  BFu7i_BFu32ll_C  {
  unsigned int v1:7;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu7i_BFu32ll_C) C1{ Fi:7 FL:32 Fc}



static void Test_BFu7i_BFu32ll_C()
{
  {
    init_simple_test("BFu7i_BFu32ll_C");
    static STRUCT_IF_C BFu7i_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_C");
    check_field_offset(lv, v3, 5, "BFu7i_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_C, BFu7i_BFu32ll_C)
//============================================================================


struct  BFu7i_BFu32ll_D  {
  unsigned int v1:7;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu7i_BFu32ll_D) C1{ Fi:7 FL:32 FL}



static void Test_BFu7i_BFu32ll_D()
{
  {
    init_simple_test("BFu7i_BFu32ll_D");
    static STRUCT_IF_C BFu7i_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_D, BFu7i_BFu32ll_D)
//============================================================================


struct  BFu7i_BFu32ll_F  {
  unsigned int v1:7;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu7i_BFu32ll_F) C1{ Fi:7 FL:32 Fi}



static void Test_BFu7i_BFu32ll_F()
{
  {
    init_simple_test("BFu7i_BFu32ll_F");
    static STRUCT_IF_C BFu7i_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_F, BFu7i_BFu32ll_F)
//============================================================================


struct  BFu7i_BFu32ll_I  {
  unsigned int v1:7;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu7i_BFu32ll_I) C1{ Fi:7 FL:32 Fi}



static void Test_BFu7i_BFu32ll_I()
{
  {
    init_simple_test("BFu7i_BFu32ll_I");
    static STRUCT_IF_C BFu7i_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_I, BFu7i_BFu32ll_I)
//============================================================================


struct  BFu7i_BFu32ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu7i_BFu32ll_Ip) C1{ Fi:7 FL:32 Fp}



static void Test_BFu7i_BFu32ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu32ll_Ip");
    static STRUCT_IF_C BFu7i_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Ip, BFu7i_BFu32ll_Ip)
//============================================================================


struct  BFu7i_BFu32ll_L  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu32ll_L) C1{ Fi:7 FL:32 FL}



static void Test_BFu7i_BFu32ll_L()
{
  {
    init_simple_test("BFu7i_BFu32ll_L");
    static STRUCT_IF_C BFu7i_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_L, BFu7i_BFu32ll_L)
//============================================================================


struct  BFu7i_BFu32ll_S  {
  unsigned int v1:7;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu7i_BFu32ll_S) C1{ Fi:7 FL:32 Fs}



static void Test_BFu7i_BFu32ll_S()
{
  {
    init_simple_test("BFu7i_BFu32ll_S");
    static STRUCT_IF_C BFu7i_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu7i_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_S, BFu7i_BFu32ll_S)
//============================================================================


struct  BFu7i_BFu32ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu32ll_Uc) C1{ Fi:7 FL:32 Fc}



static void Test_BFu7i_BFu32ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu32ll_Uc");
    static STRUCT_IF_C BFu7i_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7i_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Uc, BFu7i_BFu32ll_Uc)
//============================================================================


struct  BFu7i_BFu32ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu32ll_Ui) C1{ Fi:7 FL:32 Fi}



static void Test_BFu7i_BFu32ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu32ll_Ui");
    static STRUCT_IF_C BFu7i_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Ui, BFu7i_BFu32ll_Ui)
//============================================================================


struct  BFu7i_BFu32ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu32ll_Ul) C1{ Fi:7 FL:32 FL}



static void Test_BFu7i_BFu32ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu32ll_Ul");
    static STRUCT_IF_C BFu7i_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Ul, BFu7i_BFu32ll_Ul)
//============================================================================


struct  BFu7i_BFu32ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu32ll_Us) C1{ Fi:7 FL:32 Fs}



static void Test_BFu7i_BFu32ll_Us()
{
  {
    init_simple_test("BFu7i_BFu32ll_Us");
    static STRUCT_IF_C BFu7i_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu7i_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Us, BFu7i_BFu32ll_Us)
//============================================================================


struct  BFu7i_BFu32ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu7i_BFu32ll_Vp) C1{ Fi:7 FL:32 Fp}



static void Test_BFu7i_BFu32ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu32ll_Vp");
    static STRUCT_IF_C BFu7i_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7i_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu32ll_Vp, BFu7i_BFu32ll_Vp)
//============================================================================


struct  BFu7i_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu7i_BFu33) C1{ Fi:7 FL:33}



static void Test_BFu7i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu33");
    static STRUCT_IF_C BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33, BFu7i_BFu33)
//============================================================================


struct  BFu7i_BFu33_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu33_BFu15i) C1{ Fi:7 FL:33 Fi:15}



static void Test_BFu7i_BFu33_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu15i");
    static STRUCT_IF_C BFu7i_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu15i, BFu7i_BFu33_BFu15i)
//============================================================================


struct  BFu7i_BFu33_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu33_BFu15ll) C1{ Fi:7 FL:33 FL:15}



static void Test_BFu7i_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu15ll, BFu7i_BFu33_BFu15ll)
//============================================================================


struct  BFu7i_BFu33_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu33_BFu15s) C1{ Fi:7 FL:33 Fs:15}



static void Test_BFu7i_BFu33_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu15s");
    static STRUCT_IF_C BFu7i_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu15s, BFu7i_BFu33_BFu15s)
//============================================================================


struct  BFu7i_BFu33_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu33_BFu16i) C1{ Fi:7 FL:33 Fi:16}



static void Test_BFu7i_BFu33_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu16i");
    static STRUCT_IF_C BFu7i_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu16i, BFu7i_BFu33_BFu16i)
//============================================================================


struct  BFu7i_BFu33_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu33_BFu16ll) C1{ Fi:7 FL:33 FL:16}



static void Test_BFu7i_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu16ll, BFu7i_BFu33_BFu16ll)
//============================================================================


struct  BFu7i_BFu33_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu33_BFu16s) C1{ Fi:7 FL:33 Fs:16}



static void Test_BFu7i_BFu33_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu16s");
    static STRUCT_IF_C BFu7i_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu16s, BFu7i_BFu33_BFu16s)
//============================================================================


struct  BFu7i_BFu33_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu33_BFu17i) C1{ Fi:7 FL:33 Fi:17}



static void Test_BFu7i_BFu33_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu17i");
    static STRUCT_IF_C BFu7i_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu17i, BFu7i_BFu33_BFu17i)
//============================================================================


struct  BFu7i_BFu33_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu33_BFu17ll) C1{ Fi:7 FL:33 FL:17}



static void Test_BFu7i_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu17ll, BFu7i_BFu33_BFu17ll)
//============================================================================


struct  BFu7i_BFu33_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu33_BFu1c) C1{ Fi:7 FL:33 Fc:1}



static void Test_BFu7i_BFu33_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu33_BFu1c");
    static STRUCT_IF_C BFu7i_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7i_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu1c, BFu7i_BFu33_BFu1c)
//============================================================================


struct  BFu7i_BFu33_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu33_BFu1i) C1{ Fi:7 FL:33 Fi:1}



static void Test_BFu7i_BFu33_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu1i");
    static STRUCT_IF_C BFu7i_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7i_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu1i, BFu7i_BFu33_BFu1i)
//============================================================================


struct  BFu7i_BFu33_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu33_BFu1ll) C1{ Fi:7 FL:33 FL:1}



static void Test_BFu7i_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7i_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu1ll, BFu7i_BFu33_BFu1ll)
//============================================================================


struct  BFu7i_BFu33_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu33_BFu1s) C1{ Fi:7 FL:33 Fs:1}



static void Test_BFu7i_BFu33_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu1s");
    static STRUCT_IF_C BFu7i_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7i_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu1s, BFu7i_BFu33_BFu1s)
//============================================================================


struct  BFu7i_BFu33_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu33_BFu31i) C1{ Fi:7 FL:33 Fi:31}



static void Test_BFu7i_BFu33_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu31i");
    static STRUCT_IF_C BFu7i_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu31i, BFu7i_BFu33_BFu31i)
//============================================================================


struct  BFu7i_BFu33_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu33_BFu31ll) C1{ Fi:7 FL:33 FL:31}



static void Test_BFu7i_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu7i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu7i_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu31ll, BFu7i_BFu33_BFu31ll)
//============================================================================


struct  BFu7i_BFu33_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu33_BFu32i) C1{ Fi:7 FL:33 Fi:32}



static void Test_BFu7i_BFu33_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu32i");
    static STRUCT_IF_C BFu7i_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu32i, BFu7i_BFu33_BFu32i)
//============================================================================


struct  BFu7i_BFu33_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu33_BFu32ll) C1{ Fi:7 FL:33 FL:32}



static void Test_BFu7i_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu7i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu7i_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu32ll, BFu7i_BFu33_BFu32ll)
//============================================================================


struct  BFu7i_BFu33_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu33_BFu33) C1{ Fi:7 FL:33 FL:33}



static void Test_BFu7i_BFu33_BFu33()
{
  {
    init_simple_test("BFu7i_BFu33_BFu33");
    static STRUCT_IF_C BFu7i_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu7i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu33, BFu7i_BFu33_BFu33)
//============================================================================


struct  BFu7i_BFu33_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu33_BFu7c) C1{ Fi:7 FL:33 Fc:7}



static void Test_BFu7i_BFu33_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu33_BFu7c");
    static STRUCT_IF_C BFu7i_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu7c, BFu7i_BFu33_BFu7c)
//============================================================================


struct  BFu7i_BFu33_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu33_BFu7i) C1{ Fi:7 FL:33 Fi:7}



static void Test_BFu7i_BFu33_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu7i");
    static STRUCT_IF_C BFu7i_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu7i, BFu7i_BFu33_BFu7i)
//============================================================================


struct  BFu7i_BFu33_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu33_BFu7ll) C1{ Fi:7 FL:33 FL:7}



static void Test_BFu7i_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu7ll, BFu7i_BFu33_BFu7ll)
//============================================================================


struct  BFu7i_BFu33_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu33_BFu7s) C1{ Fi:7 FL:33 Fs:7}



static void Test_BFu7i_BFu33_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu7s");
    static STRUCT_IF_C BFu7i_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu7s, BFu7i_BFu33_BFu7s)
//============================================================================


struct  BFu7i_BFu33_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu33_BFu8c) C1{ Fi:7 FL:33 Fc:8}



static void Test_BFu7i_BFu33_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu33_BFu8c");
    static STRUCT_IF_C BFu7i_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu8c, BFu7i_BFu33_BFu8c)
//============================================================================


struct  BFu7i_BFu33_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu33_BFu8i) C1{ Fi:7 FL:33 Fi:8}



static void Test_BFu7i_BFu33_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu8i");
    static STRUCT_IF_C BFu7i_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu8i, BFu7i_BFu33_BFu8i)
//============================================================================


struct  BFu7i_BFu33_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu33_BFu8ll) C1{ Fi:7 FL:33 FL:8}



static void Test_BFu7i_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu8ll, BFu7i_BFu33_BFu8ll)
//============================================================================


struct  BFu7i_BFu33_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu33_BFu8s) C1{ Fi:7 FL:33 Fs:8}



static void Test_BFu7i_BFu33_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu8s");
    static STRUCT_IF_C BFu7i_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu8s, BFu7i_BFu33_BFu8s)
//============================================================================


struct  BFu7i_BFu33_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu33_BFu9i) C1{ Fi:7 FL:33 Fi:9}



static void Test_BFu7i_BFu33_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu9i");
    static STRUCT_IF_C BFu7i_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu9i, BFu7i_BFu33_BFu9i)
//============================================================================


struct  BFu7i_BFu33_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu33_BFu9ll) C1{ Fi:7 FL:33 FL:9}



static void Test_BFu7i_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu9ll, BFu7i_BFu33_BFu9ll)
//============================================================================


struct  BFu7i_BFu33_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu33_BFu9s) C1{ Fi:7 FL:33 Fs:9}



static void Test_BFu7i_BFu33_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu9s");
    static STRUCT_IF_C BFu7i_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu7i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_BFu9s, BFu7i_BFu33_BFu9s)
//============================================================================


struct  BFu7i_BFu33_C  {
  unsigned int v1:7;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu7i_BFu33_C) C1{ Fi:7 FL:33 Fc}



static void Test_BFu7i_BFu33_C()
{
  {
    init_simple_test("BFu7i_BFu33_C");
    static STRUCT_IF_C BFu7i_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_C");
    check_field_offset(lv, v3, 5, "BFu7i_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_C, BFu7i_BFu33_C)
//============================================================================


struct  BFu7i_BFu33_D  {
  unsigned int v1:7;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu7i_BFu33_D) C1{ Fi:7 FL:33 FL}



static void Test_BFu7i_BFu33_D()
{
  {
    init_simple_test("BFu7i_BFu33_D");
    static STRUCT_IF_C BFu7i_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_D, BFu7i_BFu33_D)
//============================================================================


struct  BFu7i_BFu33_F  {
  unsigned int v1:7;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu7i_BFu33_F) C1{ Fi:7 FL:33 Fi}



static void Test_BFu7i_BFu33_F()
{
  {
    init_simple_test("BFu7i_BFu33_F");
    static STRUCT_IF_C BFu7i_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_F, BFu7i_BFu33_F)
//============================================================================


struct  BFu7i_BFu33_I  {
  unsigned int v1:7;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu7i_BFu33_I) C1{ Fi:7 FL:33 Fi}



static void Test_BFu7i_BFu33_I()
{
  {
    init_simple_test("BFu7i_BFu33_I");
    static STRUCT_IF_C BFu7i_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_I, BFu7i_BFu33_I)
//============================================================================


struct  BFu7i_BFu33_Ip  {
  unsigned int v1:7;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu7i_BFu33_Ip) C1{ Fi:7 FL:33 Fp}



static void Test_BFu7i_BFu33_Ip()
{
  {
    init_simple_test("BFu7i_BFu33_Ip");
    static STRUCT_IF_C BFu7i_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Ip, BFu7i_BFu33_Ip)
//============================================================================


struct  BFu7i_BFu33_L  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu33_L) C1{ Fi:7 FL:33 FL}



static void Test_BFu7i_BFu33_L()
{
  {
    init_simple_test("BFu7i_BFu33_L");
    static STRUCT_IF_C BFu7i_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_L, BFu7i_BFu33_L)
//============================================================================


struct  BFu7i_BFu33_S  {
  unsigned int v1:7;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu7i_BFu33_S) C1{ Fi:7 FL:33 Fs}



static void Test_BFu7i_BFu33_S()
{
  {
    init_simple_test("BFu7i_BFu33_S");
    static STRUCT_IF_C BFu7i_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu7i_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_S, BFu7i_BFu33_S)
//============================================================================


struct  BFu7i_BFu33_Uc  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu33_Uc) C1{ Fi:7 FL:33 Fc}



static void Test_BFu7i_BFu33_Uc()
{
  {
    init_simple_test("BFu7i_BFu33_Uc");
    static STRUCT_IF_C BFu7i_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Uc");
    check_field_offset(lv, v3, 5, "BFu7i_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Uc, BFu7i_BFu33_Uc)
//============================================================================


struct  BFu7i_BFu33_Ui  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu33_Ui) C1{ Fi:7 FL:33 Fi}



static void Test_BFu7i_BFu33_Ui()
{
  {
    init_simple_test("BFu7i_BFu33_Ui");
    static STRUCT_IF_C BFu7i_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Ui, BFu7i_BFu33_Ui)
//============================================================================


struct  BFu7i_BFu33_Ul  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu33_Ul) C1{ Fi:7 FL:33 FL}



static void Test_BFu7i_BFu33_Ul()
{
  {
    init_simple_test("BFu7i_BFu33_Ul");
    static STRUCT_IF_C BFu7i_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Ul, BFu7i_BFu33_Ul)
//============================================================================


struct  BFu7i_BFu33_Us  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu33_Us) C1{ Fi:7 FL:33 Fs}



static void Test_BFu7i_BFu33_Us()
{
  {
    init_simple_test("BFu7i_BFu33_Us");
    static STRUCT_IF_C BFu7i_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu7i_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Us, BFu7i_BFu33_Us)
//============================================================================


struct  BFu7i_BFu33_Vp  {
  unsigned int v1:7;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu7i_BFu33_Vp) C1{ Fi:7 FL:33 Fp}



static void Test_BFu7i_BFu33_Vp()
{
  {
    init_simple_test("BFu7i_BFu33_Vp");
    static STRUCT_IF_C BFu7i_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu7i_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu33_Vp, BFu7i_BFu33_Vp)
//============================================================================


struct  BFu7i_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu7i_BFu7c) C1{ Fi:7 Fc:7}



static void Test_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c, BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c, BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFs7c, BFu7i_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFs7i, BFu7i_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFs7ll, BFu7i_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFs7s, BFu7i_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFu7c, BFu7i_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFu7i, BFu7i_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFu7ll, BFu7i_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7c_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7c_BFu7s, BFu7i_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i, BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFs7c, BFu7i_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFs7i, BFu7i_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFs7ll, BFu7i_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFs7s, BFu7i_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFu7c, BFu7i_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFu7i, BFu7i_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFu7ll, BFu7i_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7i_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7i_BFu7s, BFu7i_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll, BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFs7c, BFu7i_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFs7i, BFu7i_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFs7ll, BFu7i_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFs7s, BFu7i_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFu7c, BFu7i_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFu7i, BFu7i_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFu7ll, BFu7i_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7ll_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7ll_BFu7s, BFu7i_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s, BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFs7c, BFu7i_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFs7i, BFu7i_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFs7ll, BFu7i_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFs7s, BFu7i_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFu7c, BFu7i_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFu7i, BFu7i_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFu7ll, BFu7i_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFs7s_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFs7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFs7s_BFu7s, BFu7i_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu15i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu7c_BFu15i) C1{ Fi:7 Fc:7 Fi:15}



static void Test_BFu7i_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu15i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu15i, BFu7i_BFu7c_BFu15i)
//============================================================================


struct  BFu7i_BFu7c_BFu15ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu7c_BFu15ll) C1{ Fi:7 Fc:7 FL:15}



static void Test_BFu7i_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu15ll, BFu7i_BFu7c_BFu15ll)
//============================================================================


struct  BFu7i_BFu7c_BFu15s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu7c_BFu15s) C1{ Fi:7 Fc:7 Fs:15}



static void Test_BFu7i_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu15s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu15s, BFu7i_BFu7c_BFu15s)
//============================================================================


struct  BFu7i_BFu7c_BFu16i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu7c_BFu16i) C1{ Fi:7 Fc:7 Fi:16}



static void Test_BFu7i_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu16i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu16i, BFu7i_BFu7c_BFu16i)
//============================================================================


struct  BFu7i_BFu7c_BFu16ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu7c_BFu16ll) C1{ Fi:7 Fc:7 FL:16}



static void Test_BFu7i_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu16ll, BFu7i_BFu7c_BFu16ll)
//============================================================================


struct  BFu7i_BFu7c_BFu16s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu7c_BFu16s) C1{ Fi:7 Fc:7 Fs:16}



static void Test_BFu7i_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu16s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu16s, BFu7i_BFu7c_BFu16s)
//============================================================================


struct  BFu7i_BFu7c_BFu17i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu7c_BFu17i) C1{ Fi:7 Fc:7 Fi:17}



static void Test_BFu7i_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu17i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu17i, BFu7i_BFu7c_BFu17i)
//============================================================================


struct  BFu7i_BFu7c_BFu17ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu7c_BFu17ll) C1{ Fi:7 Fc:7 FL:17}



static void Test_BFu7i_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu17ll, BFu7i_BFu7c_BFu17ll)
//============================================================================


struct  BFu7i_BFu7c_BFu1c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu7c_BFu1c) C1{ Fi:7 Fc:7 Fc:1}



static void Test_BFu7i_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu1c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu1c, BFu7i_BFu7c_BFu1c)
//============================================================================


struct  BFu7i_BFu7c_BFu1i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu7c_BFu1i) C1{ Fi:7 Fc:7 Fi:1}



static void Test_BFu7i_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu1i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu1i, BFu7i_BFu7c_BFu1i)
//============================================================================


struct  BFu7i_BFu7c_BFu1ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu7c_BFu1ll) C1{ Fi:7 Fc:7 FL:1}



static void Test_BFu7i_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu1ll, BFu7i_BFu7c_BFu1ll)
//============================================================================


struct  BFu7i_BFu7c_BFu1s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu7c_BFu1s) C1{ Fi:7 Fc:7 Fs:1}



static void Test_BFu7i_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu1s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu1s, BFu7i_BFu7c_BFu1s)
//============================================================================


struct  BFu7i_BFu7c_BFu31i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu7c_BFu31i) C1{ Fi:7 Fc:7 Fi:31}



static void Test_BFu7i_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu31i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu31i, BFu7i_BFu7c_BFu31i)
//============================================================================


struct  BFu7i_BFu7c_BFu31ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu7c_BFu31ll) C1{ Fi:7 Fc:7 FL:31}



static void Test_BFu7i_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu31ll, BFu7i_BFu7c_BFu31ll)
//============================================================================


struct  BFu7i_BFu7c_BFu32i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu7c_BFu32i) C1{ Fi:7 Fc:7 Fi:32}



static void Test_BFu7i_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu32i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu32i, BFu7i_BFu7c_BFu32i)
//============================================================================


struct  BFu7i_BFu7c_BFu32ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu7c_BFu32ll) C1{ Fi:7 Fc:7 FL:32}



static void Test_BFu7i_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu32ll, BFu7i_BFu7c_BFu32ll)
//============================================================================


struct  BFu7i_BFu7c_BFu33  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu7c_BFu33) C1{ Fi:7 Fc:7 FL:33}



static void Test_BFu7i_BFu7c_BFu33()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu33");
    static STRUCT_IF_C BFu7i_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu33, BFu7i_BFu7c_BFu33)
//============================================================================


struct  BFu7i_BFu7c_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c, BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFs7c, BFu7i_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFs7i, BFu7i_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFs7ll, BFu7i_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFs7s, BFu7i_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFu7c, BFu7i_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFu7i, BFu7i_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFu7ll, BFu7i_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7c_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7c_BFu7s, BFu7i_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i, BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFs7c, BFu7i_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFs7i, BFu7i_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFs7ll, BFu7i_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFs7s, BFu7i_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFu7c, BFu7i_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFu7i, BFu7i_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFu7ll, BFu7i_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7i_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7i_BFu7s, BFu7i_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll, BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFs7c, BFu7i_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFs7i, BFu7i_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFs7ll, BFu7i_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFs7s, BFu7i_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFu7c, BFu7i_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFu7i, BFu7i_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFu7ll, BFu7i_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7ll_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7ll_BFu7s, BFu7i_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s, BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFs7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFs7c, BFu7i_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFs7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFs7i, BFu7i_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFs7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFs7ll, BFu7i_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFs7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFs7s, BFu7i_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFu7c, BFu7i_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFu7i, BFu7i_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFu7ll, BFu7i_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7c_BFu7s_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7c_BFu7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu7s_BFu7s, BFu7i_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7c_BFu8c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu7c_BFu8c) C1{ Fi:7 Fc:7 Fc:8}



static void Test_BFu7i_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu8c");
    static STRUCT_IF_C BFu7i_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu8c, BFu7i_BFu7c_BFu8c)
//============================================================================


struct  BFu7i_BFu7c_BFu8i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu7c_BFu8i) C1{ Fi:7 Fc:7 Fi:8}



static void Test_BFu7i_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu8i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu8i, BFu7i_BFu7c_BFu8i)
//============================================================================


struct  BFu7i_BFu7c_BFu8ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu7c_BFu8ll) C1{ Fi:7 Fc:7 FL:8}



static void Test_BFu7i_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu8ll, BFu7i_BFu7c_BFu8ll)
//============================================================================


struct  BFu7i_BFu7c_BFu8s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu7c_BFu8s) C1{ Fi:7 Fc:7 Fs:8}



static void Test_BFu7i_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu8s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu8s, BFu7i_BFu7c_BFu8s)
//============================================================================


struct  BFu7i_BFu7c_BFu9i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu7c_BFu9i) C1{ Fi:7 Fc:7 Fi:9}



static void Test_BFu7i_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu9i");
    static STRUCT_IF_C BFu7i_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu9i, BFu7i_BFu7c_BFu9i)
//============================================================================


struct  BFu7i_BFu7c_BFu9ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu7c_BFu9ll) C1{ Fi:7 Fc:7 FL:9}



static void Test_BFu7i_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu9ll, BFu7i_BFu7c_BFu9ll)
//============================================================================


struct  BFu7i_BFu7c_BFu9s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu7c_BFu9s) C1{ Fi:7 Fc:7 Fs:9}



static void Test_BFu7i_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu9s");
    static STRUCT_IF_C BFu7i_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_BFu9s, BFu7i_BFu7c_BFu9s)
//============================================================================


struct  BFu7i_BFu7c_C  {
  unsigned int v1:7;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu7i_BFu7c_C) C1{ Fi:7 Fc:7 Fc}



static void Test_BFu7i_BFu7c_C()
{
  {
    init_simple_test("BFu7i_BFu7c_C");
    static STRUCT_IF_C BFu7i_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_C, BFu7i_BFu7c_C)
//============================================================================


struct  BFu7i_BFu7c_D  {
  unsigned int v1:7;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu7i_BFu7c_D) C1{ Fi:7 Fc:7 FL}



static void Test_BFu7i_BFu7c_D()
{
  {
    init_simple_test("BFu7i_BFu7c_D");
    static STRUCT_IF_C BFu7i_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_D, BFu7i_BFu7c_D)
//============================================================================


struct  BFu7i_BFu7c_F  {
  unsigned int v1:7;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu7i_BFu7c_F) C1{ Fi:7 Fc:7 Fi}



static void Test_BFu7i_BFu7c_F()
{
  {
    init_simple_test("BFu7i_BFu7c_F");
    static STRUCT_IF_C BFu7i_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_F, BFu7i_BFu7c_F)
//============================================================================


struct  BFu7i_BFu7c_I  {
  unsigned int v1:7;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu7i_BFu7c_I) C1{ Fi:7 Fc:7 Fi}



static void Test_BFu7i_BFu7c_I()
{
  {
    init_simple_test("BFu7i_BFu7c_I");
    static STRUCT_IF_C BFu7i_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_I, BFu7i_BFu7c_I)
//============================================================================


struct  BFu7i_BFu7c_Ip  {
  unsigned int v1:7;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu7i_BFu7c_Ip) C1{ Fi:7 Fc:7 Fp}



static void Test_BFu7i_BFu7c_Ip()
{
  {
    init_simple_test("BFu7i_BFu7c_Ip");
    static STRUCT_IF_C BFu7i_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Ip, BFu7i_BFu7c_Ip)
//============================================================================


struct  BFu7i_BFu7c_L  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu7c_L) C1{ Fi:7 Fc:7 FL}



static void Test_BFu7i_BFu7c_L()
{
  {
    init_simple_test("BFu7i_BFu7c_L");
    static STRUCT_IF_C BFu7i_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_L, BFu7i_BFu7c_L)
//============================================================================


struct  BFu7i_BFu7c_S  {
  unsigned int v1:7;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu7i_BFu7c_S) C1{ Fi:7 Fc:7 Fs}



static void Test_BFu7i_BFu7c_S()
{
  {
    init_simple_test("BFu7i_BFu7c_S");
    static STRUCT_IF_C BFu7i_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_S, BFu7i_BFu7c_S)
//============================================================================


struct  BFu7i_BFu7c_Uc  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu7c_Uc) C1{ Fi:7 Fc:7 Fc}



static void Test_BFu7i_BFu7c_Uc()
{
  {
    init_simple_test("BFu7i_BFu7c_Uc");
    static STRUCT_IF_C BFu7i_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Uc, BFu7i_BFu7c_Uc)
//============================================================================


struct  BFu7i_BFu7c_Ui  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu7c_Ui) C1{ Fi:7 Fc:7 Fi}



static void Test_BFu7i_BFu7c_Ui()
{
  {
    init_simple_test("BFu7i_BFu7c_Ui");
    static STRUCT_IF_C BFu7i_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Ui, BFu7i_BFu7c_Ui)
//============================================================================


struct  BFu7i_BFu7c_Ul  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu7c_Ul) C1{ Fi:7 Fc:7 FL}



static void Test_BFu7i_BFu7c_Ul()
{
  {
    init_simple_test("BFu7i_BFu7c_Ul");
    static STRUCT_IF_C BFu7i_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Ul, BFu7i_BFu7c_Ul)
//============================================================================


struct  BFu7i_BFu7c_Us  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu7c_Us) C1{ Fi:7 Fc:7 Fs}



static void Test_BFu7i_BFu7c_Us()
{
  {
    init_simple_test("BFu7i_BFu7c_Us");
    static STRUCT_IF_C BFu7i_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Us, BFu7i_BFu7c_Us)
//============================================================================


struct  BFu7i_BFu7c_Vp  {
  unsigned int v1:7;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu7i_BFu7c_Vp) C1{ Fi:7 Fc:7 Fp}



static void Test_BFu7i_BFu7c_Vp()
{
  {
    init_simple_test("BFu7i_BFu7c_Vp");
    static STRUCT_IF_C BFu7i_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7c_Vp, BFu7i_BFu7c_Vp)
//============================================================================


struct  BFu7i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu7i_BFu7i) C1{ Fi:7 Fi:7}



static void Test_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i, BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c, BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFs7c, BFu7i_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFs7i, BFu7i_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFs7ll, BFu7i_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFs7s, BFu7i_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFu7c, BFu7i_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFu7i, BFu7i_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFu7ll, BFu7i_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7c_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7c_BFu7s, BFu7i_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i, BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFs7c, BFu7i_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFs7i, BFu7i_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFs7ll, BFu7i_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFs7s, BFu7i_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFu7c, BFu7i_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFu7i, BFu7i_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFu7ll, BFu7i_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7i_BFu7s, BFu7i_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll, BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFs7c, BFu7i_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFs7i, BFu7i_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFs7ll, BFu7i_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFs7s, BFu7i_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFu7c, BFu7i_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFu7i, BFu7i_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFu7ll, BFu7i_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7ll_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7ll_BFu7s, BFu7i_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s, BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFs7c, BFu7i_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFs7i, BFu7i_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFs7ll, BFu7i_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFs7s, BFu7i_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFu7c, BFu7i_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFu7i, BFu7i_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFu7ll, BFu7i_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFs7s_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFs7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFs7s_BFu7s, BFu7i_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu7i_BFu15i) C1{ Fi:7 Fi:7 Fi:15}



static void Test_BFu7i_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu15i, BFu7i_BFu7i_BFu15i)
//============================================================================


struct  BFu7i_BFu7i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu7i_BFu15ll) C1{ Fi:7 Fi:7 FL:15}



static void Test_BFu7i_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu15ll, BFu7i_BFu7i_BFu15ll)
//============================================================================


struct  BFu7i_BFu7i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu7i_BFu15s) C1{ Fi:7 Fi:7 Fs:15}



static void Test_BFu7i_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu15s, BFu7i_BFu7i_BFu15s)
//============================================================================


struct  BFu7i_BFu7i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu7i_BFu16i) C1{ Fi:7 Fi:7 Fi:16}



static void Test_BFu7i_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu16i, BFu7i_BFu7i_BFu16i)
//============================================================================


struct  BFu7i_BFu7i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu7i_BFu16ll) C1{ Fi:7 Fi:7 FL:16}



static void Test_BFu7i_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu16ll, BFu7i_BFu7i_BFu16ll)
//============================================================================


struct  BFu7i_BFu7i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu7i_BFu16s) C1{ Fi:7 Fi:7 Fs:16}



static void Test_BFu7i_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu16s, BFu7i_BFu7i_BFu16s)
//============================================================================


struct  BFu7i_BFu7i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu7i_BFu17i) C1{ Fi:7 Fi:7 Fi:17}



static void Test_BFu7i_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu17i, BFu7i_BFu7i_BFu17i)
//============================================================================


struct  BFu7i_BFu7i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu7i_BFu17ll) C1{ Fi:7 Fi:7 FL:17}



static void Test_BFu7i_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu17ll, BFu7i_BFu7i_BFu17ll)
//============================================================================


struct  BFu7i_BFu7i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu7i_BFu1c) C1{ Fi:7 Fi:7 Fc:1}



static void Test_BFu7i_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu1c, BFu7i_BFu7i_BFu1c)
//============================================================================


struct  BFu7i_BFu7i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu7i_BFu1i) C1{ Fi:7 Fi:7 Fi:1}



static void Test_BFu7i_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu1i, BFu7i_BFu7i_BFu1i)
//============================================================================


struct  BFu7i_BFu7i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu7i_BFu1ll) C1{ Fi:7 Fi:7 FL:1}



static void Test_BFu7i_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu1ll, BFu7i_BFu7i_BFu1ll)
//============================================================================


struct  BFu7i_BFu7i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu7i_BFu1s) C1{ Fi:7 Fi:7 Fs:1}



static void Test_BFu7i_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu1s, BFu7i_BFu7i_BFu1s)
//============================================================================


struct  BFu7i_BFu7i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu7i_BFu31i) C1{ Fi:7 Fi:7 Fi:31}



static void Test_BFu7i_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu31i, BFu7i_BFu7i_BFu31i)
//============================================================================


struct  BFu7i_BFu7i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu7i_BFu31ll) C1{ Fi:7 Fi:7 FL:31}



static void Test_BFu7i_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7i_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu31ll, BFu7i_BFu7i_BFu31ll)
//============================================================================


struct  BFu7i_BFu7i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu7i_BFu32i) C1{ Fi:7 Fi:7 Fi:32}



static void Test_BFu7i_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu32i, BFu7i_BFu7i_BFu32i)
//============================================================================


struct  BFu7i_BFu7i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu7i_BFu32ll) C1{ Fi:7 Fi:7 FL:32}



static void Test_BFu7i_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7i_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu32ll, BFu7i_BFu7i_BFu32ll)
//============================================================================


struct  BFu7i_BFu7i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu7i_BFu33) C1{ Fi:7 Fi:7 FL:33}



static void Test_BFu7i_BFu7i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu33");
    static STRUCT_IF_C BFu7i_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7i_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu33, BFu7i_BFu7i_BFu33)
//============================================================================


struct  BFu7i_BFu7i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c, BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFs7c, BFu7i_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFs7i, BFu7i_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFs7ll, BFu7i_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFs7s, BFu7i_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFu7c, BFu7i_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFu7i, BFu7i_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFu7ll, BFu7i_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7c_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7c_BFu7s, BFu7i_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i, BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFs7c, BFu7i_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFs7i, BFu7i_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFs7ll, BFu7i_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFs7s, BFu7i_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFu7c, BFu7i_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFu7i, BFu7i_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFu7ll, BFu7i_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7i_BFu7s, BFu7i_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll, BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFs7c, BFu7i_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFs7i, BFu7i_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFs7ll, BFu7i_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFs7s, BFu7i_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFu7c, BFu7i_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFu7i, BFu7i_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFu7ll, BFu7i_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7ll_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7ll_BFu7s, BFu7i_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s, BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFs7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFs7c, BFu7i_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFs7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFs7i, BFu7i_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFs7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFs7ll, BFu7i_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFs7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFs7s, BFu7i_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFu7c, BFu7i_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFu7i, BFu7i_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFu7ll, BFu7i_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7i_BFu7s_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7i_BFu7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu7s_BFu7s, BFu7i_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu7i_BFu8c) C1{ Fi:7 Fi:7 Fc:8}



static void Test_BFu7i_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu8c, BFu7i_BFu7i_BFu8c)
//============================================================================


struct  BFu7i_BFu7i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu7i_BFu8i) C1{ Fi:7 Fi:7 Fi:8}



static void Test_BFu7i_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu8i, BFu7i_BFu7i_BFu8i)
//============================================================================


struct  BFu7i_BFu7i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu7i_BFu8ll) C1{ Fi:7 Fi:7 FL:8}



static void Test_BFu7i_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu8ll, BFu7i_BFu7i_BFu8ll)
//============================================================================


struct  BFu7i_BFu7i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu7i_BFu8s) C1{ Fi:7 Fi:7 Fs:8}



static void Test_BFu7i_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu8s, BFu7i_BFu7i_BFu8s)
//============================================================================


struct  BFu7i_BFu7i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu7i_BFu9i) C1{ Fi:7 Fi:7 Fi:9}



static void Test_BFu7i_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu9i, BFu7i_BFu7i_BFu9i)
//============================================================================


struct  BFu7i_BFu7i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu7i_BFu9ll) C1{ Fi:7 Fi:7 FL:9}



static void Test_BFu7i_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu9ll, BFu7i_BFu7i_BFu9ll)
//============================================================================


struct  BFu7i_BFu7i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu7i_BFu9s) C1{ Fi:7 Fi:7 Fs:9}



static void Test_BFu7i_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_BFu9s, BFu7i_BFu7i_BFu9s)
//============================================================================


struct  BFu7i_BFu7i_C  {
  unsigned int v1:7;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu7i_BFu7i_C) C1{ Fi:7 Fi:7 Fc}



static void Test_BFu7i_BFu7i_C()
{
  {
    init_simple_test("BFu7i_BFu7i_C");
    static STRUCT_IF_C BFu7i_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_C, BFu7i_BFu7i_C)
//============================================================================


struct  BFu7i_BFu7i_D  {
  unsigned int v1:7;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu7i_BFu7i_D) C1{ Fi:7 Fi:7 FL}



static void Test_BFu7i_BFu7i_D()
{
  {
    init_simple_test("BFu7i_BFu7i_D");
    static STRUCT_IF_C BFu7i_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_D, BFu7i_BFu7i_D)
//============================================================================


struct  BFu7i_BFu7i_F  {
  unsigned int v1:7;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu7i_BFu7i_F) C1{ Fi:7 Fi:7 Fi}



static void Test_BFu7i_BFu7i_F()
{
  {
    init_simple_test("BFu7i_BFu7i_F");
    static STRUCT_IF_C BFu7i_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_F, BFu7i_BFu7i_F)
//============================================================================


struct  BFu7i_BFu7i_I  {
  unsigned int v1:7;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu7i_BFu7i_I) C1{ Fi:7 Fi:7 Fi}



static void Test_BFu7i_BFu7i_I()
{
  {
    init_simple_test("BFu7i_BFu7i_I");
    static STRUCT_IF_C BFu7i_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_I, BFu7i_BFu7i_I)
//============================================================================


struct  BFu7i_BFu7i_Ip  {
  unsigned int v1:7;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu7i_BFu7i_Ip) C1{ Fi:7 Fi:7 Fp}



static void Test_BFu7i_BFu7i_Ip()
{
  {
    init_simple_test("BFu7i_BFu7i_Ip");
    static STRUCT_IF_C BFu7i_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Ip, BFu7i_BFu7i_Ip)
//============================================================================


struct  BFu7i_BFu7i_L  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu7i_L) C1{ Fi:7 Fi:7 FL}



static void Test_BFu7i_BFu7i_L()
{
  {
    init_simple_test("BFu7i_BFu7i_L");
    static STRUCT_IF_C BFu7i_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_L, BFu7i_BFu7i_L)
//============================================================================


struct  BFu7i_BFu7i_S  {
  unsigned int v1:7;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu7i_BFu7i_S) C1{ Fi:7 Fi:7 Fs}



static void Test_BFu7i_BFu7i_S()
{
  {
    init_simple_test("BFu7i_BFu7i_S");
    static STRUCT_IF_C BFu7i_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_S, BFu7i_BFu7i_S)
//============================================================================


struct  BFu7i_BFu7i_Uc  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu7i_Uc) C1{ Fi:7 Fi:7 Fc}



static void Test_BFu7i_BFu7i_Uc()
{
  {
    init_simple_test("BFu7i_BFu7i_Uc");
    static STRUCT_IF_C BFu7i_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Uc, BFu7i_BFu7i_Uc)
//============================================================================


struct  BFu7i_BFu7i_Ui  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu7i_Ui) C1{ Fi:7 Fi:7 Fi}



static void Test_BFu7i_BFu7i_Ui()
{
  {
    init_simple_test("BFu7i_BFu7i_Ui");
    static STRUCT_IF_C BFu7i_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Ui, BFu7i_BFu7i_Ui)
//============================================================================


struct  BFu7i_BFu7i_Ul  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu7i_Ul) C1{ Fi:7 Fi:7 FL}



static void Test_BFu7i_BFu7i_Ul()
{
  {
    init_simple_test("BFu7i_BFu7i_Ul");
    static STRUCT_IF_C BFu7i_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Ul, BFu7i_BFu7i_Ul)
//============================================================================


struct  BFu7i_BFu7i_Us  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu7i_Us) C1{ Fi:7 Fi:7 Fs}



static void Test_BFu7i_BFu7i_Us()
{
  {
    init_simple_test("BFu7i_BFu7i_Us");
    static STRUCT_IF_C BFu7i_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Us, BFu7i_BFu7i_Us)
//============================================================================


struct  BFu7i_BFu7i_Vp  {
  unsigned int v1:7;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu7i_BFu7i_Vp) C1{ Fi:7 Fi:7 Fp}



static void Test_BFu7i_BFu7i_Vp()
{
  {
    init_simple_test("BFu7i_BFu7i_Vp");
    static STRUCT_IF_C BFu7i_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7i_Vp, BFu7i_BFu7i_Vp)
//============================================================================


struct  BFu7i_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu7i_BFu7ll) C1{ Fi:7 FL:7}



static void Test_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll, BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c, BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFs7c, BFu7i_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFs7i, BFu7i_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFs7ll, BFu7i_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFs7s, BFu7i_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFu7c, BFu7i_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFu7i, BFu7i_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFu7ll, BFu7i_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7c_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7c_BFu7s, BFu7i_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i, BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFs7c, BFu7i_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFs7i, BFu7i_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFs7ll, BFu7i_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFs7s, BFu7i_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFu7c, BFu7i_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFu7i, BFu7i_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFu7ll, BFu7i_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7i_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7i_BFu7s, BFu7i_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll, BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFs7c, BFu7i_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFs7i, BFu7i_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFs7ll, BFu7i_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFs7s, BFu7i_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFu7c, BFu7i_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFu7i, BFu7i_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFu7ll, BFu7i_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7ll_BFu7s, BFu7i_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s, BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFs7c, BFu7i_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFs7i, BFu7i_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFs7ll, BFu7i_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFs7s, BFu7i_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFu7c, BFu7i_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFu7i, BFu7i_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFu7ll, BFu7i_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFs7s_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFs7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFs7s_BFu7s, BFu7i_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu7ll_BFu15i) C1{ Fi:7 FL:7 Fi:15}



static void Test_BFu7i_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu15i, BFu7i_BFu7ll_BFu15i)
//============================================================================


struct  BFu7i_BFu7ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu7ll_BFu15ll) C1{ Fi:7 FL:7 FL:15}



static void Test_BFu7i_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu15ll, BFu7i_BFu7ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu7ll_BFu15s) C1{ Fi:7 FL:7 Fs:15}



static void Test_BFu7i_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu15s, BFu7i_BFu7ll_BFu15s)
//============================================================================


struct  BFu7i_BFu7ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu7ll_BFu16i) C1{ Fi:7 FL:7 Fi:16}



static void Test_BFu7i_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu16i, BFu7i_BFu7ll_BFu16i)
//============================================================================


struct  BFu7i_BFu7ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu7ll_BFu16ll) C1{ Fi:7 FL:7 FL:16}



static void Test_BFu7i_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu16ll, BFu7i_BFu7ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu7ll_BFu16s) C1{ Fi:7 FL:7 Fs:16}



static void Test_BFu7i_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu16s, BFu7i_BFu7ll_BFu16s)
//============================================================================


struct  BFu7i_BFu7ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu7ll_BFu17i) C1{ Fi:7 FL:7 Fi:17}



static void Test_BFu7i_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu17i, BFu7i_BFu7ll_BFu17i)
//============================================================================


struct  BFu7i_BFu7ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu7ll_BFu17ll) C1{ Fi:7 FL:7 FL:17}



static void Test_BFu7i_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu17ll, BFu7i_BFu7ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu7ll_BFu1c) C1{ Fi:7 FL:7 Fc:1}



static void Test_BFu7i_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu1c, BFu7i_BFu7ll_BFu1c)
//============================================================================


struct  BFu7i_BFu7ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu7ll_BFu1i) C1{ Fi:7 FL:7 Fi:1}



static void Test_BFu7i_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu1i, BFu7i_BFu7ll_BFu1i)
//============================================================================


struct  BFu7i_BFu7ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu7ll_BFu1ll) C1{ Fi:7 FL:7 FL:1}



static void Test_BFu7i_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu1ll, BFu7i_BFu7ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu7ll_BFu1s) C1{ Fi:7 FL:7 Fs:1}



static void Test_BFu7i_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu1s, BFu7i_BFu7ll_BFu1s)
//============================================================================


struct  BFu7i_BFu7ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu7ll_BFu31i) C1{ Fi:7 FL:7 Fi:31}



static void Test_BFu7i_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu31i, BFu7i_BFu7ll_BFu31i)
//============================================================================


struct  BFu7i_BFu7ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu7ll_BFu31ll) C1{ Fi:7 FL:7 FL:31}



static void Test_BFu7i_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7i_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu31ll, BFu7i_BFu7ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu7ll_BFu32i) C1{ Fi:7 FL:7 Fi:32}



static void Test_BFu7i_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu32i, BFu7i_BFu7ll_BFu32i)
//============================================================================


struct  BFu7i_BFu7ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu7ll_BFu32ll) C1{ Fi:7 FL:7 FL:32}



static void Test_BFu7i_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7i_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu32ll, BFu7i_BFu7ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu7ll_BFu33) C1{ Fi:7 FL:7 FL:33}



static void Test_BFu7i_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7i_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu33, BFu7i_BFu7ll_BFu33)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c, BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFs7c, BFu7i_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFs7i, BFu7i_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFs7ll, BFu7i_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFs7s, BFu7i_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFu7c, BFu7i_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFu7i, BFu7i_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFu7ll, BFu7i_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7c_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7c_BFu7s, BFu7i_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i, BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFs7c, BFu7i_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFs7i, BFu7i_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFs7ll, BFu7i_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFs7s, BFu7i_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFu7c, BFu7i_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFu7i, BFu7i_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFu7ll, BFu7i_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7i_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7i_BFu7s, BFu7i_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll, BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFs7c, BFu7i_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFs7i, BFu7i_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFs7ll, BFu7i_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFs7s, BFu7i_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFu7c, BFu7i_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFu7i, BFu7i_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFu7ll, BFu7i_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7ll_BFu7s, BFu7i_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s, BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFs7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFs7c, BFu7i_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFs7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFs7i, BFu7i_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFs7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFs7ll, BFu7i_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFs7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFs7s, BFu7i_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFu7c, BFu7i_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFu7i, BFu7i_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFu7ll, BFu7i_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu7s_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7ll_BFu7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu7s_BFu7s, BFu7i_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu7ll_BFu8c) C1{ Fi:7 FL:7 Fc:8}



static void Test_BFu7i_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu8c, BFu7i_BFu7ll_BFu8c)
//============================================================================


struct  BFu7i_BFu7ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu7ll_BFu8i) C1{ Fi:7 FL:7 Fi:8}



static void Test_BFu7i_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu8i, BFu7i_BFu7ll_BFu8i)
//============================================================================


struct  BFu7i_BFu7ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu7ll_BFu8ll) C1{ Fi:7 FL:7 FL:8}



static void Test_BFu7i_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu8ll, BFu7i_BFu7ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu7ll_BFu8s) C1{ Fi:7 FL:7 Fs:8}



static void Test_BFu7i_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu8s, BFu7i_BFu7ll_BFu8s)
//============================================================================


struct  BFu7i_BFu7ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu7ll_BFu9i) C1{ Fi:7 FL:7 Fi:9}



static void Test_BFu7i_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu9i, BFu7i_BFu7ll_BFu9i)
//============================================================================


struct  BFu7i_BFu7ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu7ll_BFu9ll) C1{ Fi:7 FL:7 FL:9}



static void Test_BFu7i_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu9ll, BFu7i_BFu7ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu7ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu7ll_BFu9s) C1{ Fi:7 FL:7 Fs:9}



static void Test_BFu7i_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_BFu9s, BFu7i_BFu7ll_BFu9s)
//============================================================================


struct  BFu7i_BFu7ll_C  {
  unsigned int v1:7;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu7i_BFu7ll_C) C1{ Fi:7 FL:7 Fc}



static void Test_BFu7i_BFu7ll_C()
{
  {
    init_simple_test("BFu7i_BFu7ll_C");
    static STRUCT_IF_C BFu7i_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_C, BFu7i_BFu7ll_C)
//============================================================================


struct  BFu7i_BFu7ll_D  {
  unsigned int v1:7;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu7i_BFu7ll_D) C1{ Fi:7 FL:7 FL}



static void Test_BFu7i_BFu7ll_D()
{
  {
    init_simple_test("BFu7i_BFu7ll_D");
    static STRUCT_IF_C BFu7i_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_D, BFu7i_BFu7ll_D)
//============================================================================


struct  BFu7i_BFu7ll_F  {
  unsigned int v1:7;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu7i_BFu7ll_F) C1{ Fi:7 FL:7 Fi}



static void Test_BFu7i_BFu7ll_F()
{
  {
    init_simple_test("BFu7i_BFu7ll_F");
    static STRUCT_IF_C BFu7i_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_F, BFu7i_BFu7ll_F)
//============================================================================


struct  BFu7i_BFu7ll_I  {
  unsigned int v1:7;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu7i_BFu7ll_I) C1{ Fi:7 FL:7 Fi}



static void Test_BFu7i_BFu7ll_I()
{
  {
    init_simple_test("BFu7i_BFu7ll_I");
    static STRUCT_IF_C BFu7i_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_I, BFu7i_BFu7ll_I)
//============================================================================


struct  BFu7i_BFu7ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu7i_BFu7ll_Ip) C1{ Fi:7 FL:7 Fp}



static void Test_BFu7i_BFu7ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu7ll_Ip");
    static STRUCT_IF_C BFu7i_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Ip, BFu7i_BFu7ll_Ip)
//============================================================================


struct  BFu7i_BFu7ll_L  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu7ll_L) C1{ Fi:7 FL:7 FL}



static void Test_BFu7i_BFu7ll_L()
{
  {
    init_simple_test("BFu7i_BFu7ll_L");
    static STRUCT_IF_C BFu7i_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_L, BFu7i_BFu7ll_L)
//============================================================================


struct  BFu7i_BFu7ll_S  {
  unsigned int v1:7;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu7i_BFu7ll_S) C1{ Fi:7 FL:7 Fs}



static void Test_BFu7i_BFu7ll_S()
{
  {
    init_simple_test("BFu7i_BFu7ll_S");
    static STRUCT_IF_C BFu7i_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_S, BFu7i_BFu7ll_S)
//============================================================================


struct  BFu7i_BFu7ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu7ll_Uc) C1{ Fi:7 FL:7 Fc}



static void Test_BFu7i_BFu7ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu7ll_Uc");
    static STRUCT_IF_C BFu7i_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Uc, BFu7i_BFu7ll_Uc)
//============================================================================


struct  BFu7i_BFu7ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu7ll_Ui) C1{ Fi:7 FL:7 Fi}



static void Test_BFu7i_BFu7ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu7ll_Ui");
    static STRUCT_IF_C BFu7i_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Ui, BFu7i_BFu7ll_Ui)
//============================================================================


struct  BFu7i_BFu7ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu7ll_Ul) C1{ Fi:7 FL:7 FL}



static void Test_BFu7i_BFu7ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu7ll_Ul");
    static STRUCT_IF_C BFu7i_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Ul, BFu7i_BFu7ll_Ul)
//============================================================================


struct  BFu7i_BFu7ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu7ll_Us) C1{ Fi:7 FL:7 Fs}



static void Test_BFu7i_BFu7ll_Us()
{
  {
    init_simple_test("BFu7i_BFu7ll_Us");
    static STRUCT_IF_C BFu7i_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Us, BFu7i_BFu7ll_Us)
//============================================================================


struct  BFu7i_BFu7ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu7i_BFu7ll_Vp) C1{ Fi:7 FL:7 Fp}



static void Test_BFu7i_BFu7ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu7ll_Vp");
    static STRUCT_IF_C BFu7i_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7ll_Vp, BFu7i_BFu7ll_Vp)
//============================================================================


struct  BFu7i_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu7i_BFu7s) C1{ Fi:7 Fs:7}



static void Test_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s, BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c, BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFs7c, BFu7i_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFs7i, BFu7i_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFs7ll, BFu7i_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFs7s, BFu7i_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFu7c, BFu7i_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFu7i, BFu7i_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFu7ll, BFu7i_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7c_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7c_BFu7s, BFu7i_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i, BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFs7c, BFu7i_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFs7i, BFu7i_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFs7ll, BFu7i_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFs7s, BFu7i_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFu7c, BFu7i_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFu7i, BFu7i_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFu7ll, BFu7i_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7i_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7i_BFu7s, BFu7i_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll, BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFs7c, BFu7i_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFs7i, BFu7i_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFs7ll, BFu7i_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFs7s, BFu7i_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFu7c, BFu7i_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFu7i, BFu7i_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFu7ll, BFu7i_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7ll_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7ll_BFu7s, BFu7i_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s, BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFs7c, BFu7i_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFs7i, BFu7i_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFs7ll, BFu7i_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFs7s, BFu7i_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFu7c, BFu7i_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFu7i, BFu7i_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFu7ll, BFu7i_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFs7s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFs7s_BFu7s, BFu7i_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu7s_BFu15i) C1{ Fi:7 Fs:7 Fi:15}



static void Test_BFu7i_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu15i, BFu7i_BFu7s_BFu15i)
//============================================================================


struct  BFu7i_BFu7s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu7s_BFu15ll) C1{ Fi:7 Fs:7 FL:15}



static void Test_BFu7i_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu15ll, BFu7i_BFu7s_BFu15ll)
//============================================================================


struct  BFu7i_BFu7s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu7s_BFu15s) C1{ Fi:7 Fs:7 Fs:15}



static void Test_BFu7i_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu15s, BFu7i_BFu7s_BFu15s)
//============================================================================


struct  BFu7i_BFu7s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu7s_BFu16i) C1{ Fi:7 Fs:7 Fi:16}



static void Test_BFu7i_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu16i, BFu7i_BFu7s_BFu16i)
//============================================================================


struct  BFu7i_BFu7s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu7s_BFu16ll) C1{ Fi:7 Fs:7 FL:16}



static void Test_BFu7i_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu16ll, BFu7i_BFu7s_BFu16ll)
//============================================================================


struct  BFu7i_BFu7s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu7s_BFu16s) C1{ Fi:7 Fs:7 Fs:16}



static void Test_BFu7i_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu16s, BFu7i_BFu7s_BFu16s)
//============================================================================


struct  BFu7i_BFu7s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu7s_BFu17i) C1{ Fi:7 Fs:7 Fi:17}



static void Test_BFu7i_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu17i, BFu7i_BFu7s_BFu17i)
//============================================================================


struct  BFu7i_BFu7s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu7s_BFu17ll) C1{ Fi:7 Fs:7 FL:17}



static void Test_BFu7i_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu17ll, BFu7i_BFu7s_BFu17ll)
//============================================================================


struct  BFu7i_BFu7s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu7s_BFu1c) C1{ Fi:7 Fs:7 Fc:1}



static void Test_BFu7i_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu1c, BFu7i_BFu7s_BFu1c)
//============================================================================


struct  BFu7i_BFu7s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu7s_BFu1i) C1{ Fi:7 Fs:7 Fi:1}



static void Test_BFu7i_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu1i, BFu7i_BFu7s_BFu1i)
//============================================================================


struct  BFu7i_BFu7s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu7s_BFu1ll) C1{ Fi:7 Fs:7 FL:1}



static void Test_BFu7i_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu1ll, BFu7i_BFu7s_BFu1ll)
//============================================================================


struct  BFu7i_BFu7s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu7s_BFu1s) C1{ Fi:7 Fs:7 Fs:1}



static void Test_BFu7i_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7i_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu1s, BFu7i_BFu7s_BFu1s)
//============================================================================


struct  BFu7i_BFu7s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu7s_BFu31i) C1{ Fi:7 Fs:7 Fi:31}



static void Test_BFu7i_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu31i, BFu7i_BFu7s_BFu31i)
//============================================================================


struct  BFu7i_BFu7s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu7s_BFu31ll) C1{ Fi:7 Fs:7 FL:31}



static void Test_BFu7i_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7i_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu31ll, BFu7i_BFu7s_BFu31ll)
//============================================================================


struct  BFu7i_BFu7s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu7s_BFu32i) C1{ Fi:7 Fs:7 Fi:32}



static void Test_BFu7i_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu32i, BFu7i_BFu7s_BFu32i)
//============================================================================


struct  BFu7i_BFu7s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu7s_BFu32ll) C1{ Fi:7 Fs:7 FL:32}



static void Test_BFu7i_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7i_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu32ll, BFu7i_BFu7s_BFu32ll)
//============================================================================


struct  BFu7i_BFu7s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu7s_BFu33) C1{ Fi:7 Fs:7 FL:33}



static void Test_BFu7i_BFu7s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu33");
    static STRUCT_IF_C BFu7i_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7i_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu33, BFu7i_BFu7s_BFu33)
//============================================================================


struct  BFu7i_BFu7s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c, BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFs7c, BFu7i_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFs7i, BFu7i_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFs7ll, BFu7i_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFs7s, BFu7i_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFu7c, BFu7i_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFu7i, BFu7i_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFu7ll, BFu7i_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7c_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7c_BFu7s, BFu7i_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i, BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFs7c, BFu7i_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFs7i, BFu7i_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFs7ll, BFu7i_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFs7s, BFu7i_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFu7c, BFu7i_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFu7i, BFu7i_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFu7ll, BFu7i_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7i_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7i_BFu7s, BFu7i_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll, BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFs7c, BFu7i_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFs7i, BFu7i_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFs7ll, BFu7i_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFs7s, BFu7i_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFu7c, BFu7i_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFu7i, BFu7i_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFu7ll, BFu7i_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7ll_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7ll_BFu7s, BFu7i_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s, BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFs7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFs7c, BFu7i_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFs7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFs7i, BFu7i_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFs7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFs7ll, BFu7i_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFs7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFs7s, BFu7i_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFu7c, BFu7i_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFu7i, BFu7i_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFu7ll, BFu7i_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFu7s_BFu7s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFu7s_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu7s_BFu7s, BFu7i_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu7s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu7s_BFu8c) C1{ Fi:7 Fs:7 Fc:8}



static void Test_BFu7i_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu8c, BFu7i_BFu7s_BFu8c)
//============================================================================


struct  BFu7i_BFu7s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu7s_BFu8i) C1{ Fi:7 Fs:7 Fi:8}



static void Test_BFu7i_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu8i, BFu7i_BFu7s_BFu8i)
//============================================================================


struct  BFu7i_BFu7s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu7s_BFu8ll) C1{ Fi:7 Fs:7 FL:8}



static void Test_BFu7i_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu8ll, BFu7i_BFu7s_BFu8ll)
//============================================================================


struct  BFu7i_BFu7s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu7s_BFu8s) C1{ Fi:7 Fs:7 Fs:8}



static void Test_BFu7i_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu8s, BFu7i_BFu7s_BFu8s)
//============================================================================


struct  BFu7i_BFu7s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu7s_BFu9i) C1{ Fi:7 Fs:7 Fi:9}



static void Test_BFu7i_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu9i, BFu7i_BFu7s_BFu9i)
//============================================================================


struct  BFu7i_BFu7s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu7s_BFu9ll) C1{ Fi:7 Fs:7 FL:9}



static void Test_BFu7i_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu9ll, BFu7i_BFu7s_BFu9ll)
//============================================================================


struct  BFu7i_BFu7s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu7s_BFu9s) C1{ Fi:7 Fs:7 Fs:9}



static void Test_BFu7i_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_BFu9s, BFu7i_BFu7s_BFu9s)
//============================================================================


struct  BFu7i_BFu7s_C  {
  unsigned int v1:7;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu7i_BFu7s_C) C1{ Fi:7 Fs:7 Fc}



static void Test_BFu7i_BFu7s_C()
{
  {
    init_simple_test("BFu7i_BFu7s_C");
    static STRUCT_IF_C BFu7i_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_C, BFu7i_BFu7s_C)
//============================================================================


struct  BFu7i_BFu7s_D  {
  unsigned int v1:7;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu7i_BFu7s_D) C1{ Fi:7 Fs:7 FL}



static void Test_BFu7i_BFu7s_D()
{
  {
    init_simple_test("BFu7i_BFu7s_D");
    static STRUCT_IF_C BFu7i_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_D, BFu7i_BFu7s_D)
//============================================================================


struct  BFu7i_BFu7s_F  {
  unsigned int v1:7;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu7i_BFu7s_F) C1{ Fi:7 Fs:7 Fi}



static void Test_BFu7i_BFu7s_F()
{
  {
    init_simple_test("BFu7i_BFu7s_F");
    static STRUCT_IF_C BFu7i_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_F, BFu7i_BFu7s_F)
//============================================================================


struct  BFu7i_BFu7s_I  {
  unsigned int v1:7;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu7i_BFu7s_I) C1{ Fi:7 Fs:7 Fi}



static void Test_BFu7i_BFu7s_I()
{
  {
    init_simple_test("BFu7i_BFu7s_I");
    static STRUCT_IF_C BFu7i_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_I, BFu7i_BFu7s_I)
//============================================================================


struct  BFu7i_BFu7s_Ip  {
  unsigned int v1:7;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu7i_BFu7s_Ip) C1{ Fi:7 Fs:7 Fp}



static void Test_BFu7i_BFu7s_Ip()
{
  {
    init_simple_test("BFu7i_BFu7s_Ip");
    static STRUCT_IF_C BFu7i_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Ip, BFu7i_BFu7s_Ip)
//============================================================================


struct  BFu7i_BFu7s_L  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu7s_L) C1{ Fi:7 Fs:7 FL}



static void Test_BFu7i_BFu7s_L()
{
  {
    init_simple_test("BFu7i_BFu7s_L");
    static STRUCT_IF_C BFu7i_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_L, BFu7i_BFu7s_L)
//============================================================================


struct  BFu7i_BFu7s_S  {
  unsigned int v1:7;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu7i_BFu7s_S) C1{ Fi:7 Fs:7 Fs}



static void Test_BFu7i_BFu7s_S()
{
  {
    init_simple_test("BFu7i_BFu7s_S");
    static STRUCT_IF_C BFu7i_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_S, BFu7i_BFu7s_S)
//============================================================================


struct  BFu7i_BFu7s_Uc  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu7s_Uc) C1{ Fi:7 Fs:7 Fc}



static void Test_BFu7i_BFu7s_Uc()
{
  {
    init_simple_test("BFu7i_BFu7s_Uc");
    static STRUCT_IF_C BFu7i_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Uc, BFu7i_BFu7s_Uc)
//============================================================================


struct  BFu7i_BFu7s_Ui  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu7s_Ui) C1{ Fi:7 Fs:7 Fi}



static void Test_BFu7i_BFu7s_Ui()
{
  {
    init_simple_test("BFu7i_BFu7s_Ui");
    static STRUCT_IF_C BFu7i_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Ui, BFu7i_BFu7s_Ui)
//============================================================================


struct  BFu7i_BFu7s_Ul  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu7s_Ul) C1{ Fi:7 Fs:7 FL}



static void Test_BFu7i_BFu7s_Ul()
{
  {
    init_simple_test("BFu7i_BFu7s_Ul");
    static STRUCT_IF_C BFu7i_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Ul, BFu7i_BFu7s_Ul)
//============================================================================


struct  BFu7i_BFu7s_Us  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu7s_Us) C1{ Fi:7 Fs:7 Fs}



static void Test_BFu7i_BFu7s_Us()
{
  {
    init_simple_test("BFu7i_BFu7s_Us");
    static STRUCT_IF_C BFu7i_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Us, BFu7i_BFu7s_Us)
//============================================================================


struct  BFu7i_BFu7s_Vp  {
  unsigned int v1:7;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu7i_BFu7s_Vp) C1{ Fi:7 Fs:7 Fp}



static void Test_BFu7i_BFu7s_Vp()
{
  {
    init_simple_test("BFu7i_BFu7s_Vp");
    static STRUCT_IF_C BFu7i_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu7s_Vp, BFu7i_BFu7s_Vp)
//============================================================================


struct  BFu7i_BFu8c  {
  unsigned int v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu7i_BFu8c) C1{ Fi:7 Fc:8}



static void Test_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c, BFu7i_BFu8c)
//============================================================================


struct  BFu7i_BFu8c_BFu15i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu8c_BFu15i) C1{ Fi:7 Fc:8 Fi:15}



static void Test_BFu7i_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu15i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu15i, BFu7i_BFu8c_BFu15i)
//============================================================================


struct  BFu7i_BFu8c_BFu15ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu8c_BFu15ll) C1{ Fi:7 Fc:8 FL:15}



static void Test_BFu7i_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu15ll, BFu7i_BFu8c_BFu15ll)
//============================================================================


struct  BFu7i_BFu8c_BFu15s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu8c_BFu15s) C1{ Fi:7 Fc:8 Fs:15}



static void Test_BFu7i_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu15s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu15s, BFu7i_BFu8c_BFu15s)
//============================================================================


struct  BFu7i_BFu8c_BFu16i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu8c_BFu16i) C1{ Fi:7 Fc:8 Fi:16}



static void Test_BFu7i_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu16i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu16i, BFu7i_BFu8c_BFu16i)
//============================================================================


struct  BFu7i_BFu8c_BFu16ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu8c_BFu16ll) C1{ Fi:7 Fc:8 FL:16}



static void Test_BFu7i_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu16ll, BFu7i_BFu8c_BFu16ll)
//============================================================================


struct  BFu7i_BFu8c_BFu16s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu8c_BFu16s) C1{ Fi:7 Fc:8 Fs:16}



static void Test_BFu7i_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu16s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu16s, BFu7i_BFu8c_BFu16s)
//============================================================================


struct  BFu7i_BFu8c_BFu17i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu8c_BFu17i) C1{ Fi:7 Fc:8 Fi:17}



static void Test_BFu7i_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu17i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu17i, BFu7i_BFu8c_BFu17i)
//============================================================================


struct  BFu7i_BFu8c_BFu17ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu8c_BFu17ll) C1{ Fi:7 Fc:8 FL:17}



static void Test_BFu7i_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu17ll, BFu7i_BFu8c_BFu17ll)
//============================================================================


struct  BFu7i_BFu8c_BFu1c  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu8c_BFu1c) C1{ Fi:7 Fc:8 Fc:1}



static void Test_BFu7i_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu1c");
    static STRUCT_IF_C BFu7i_BFu8c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu1c, BFu7i_BFu8c_BFu1c)
//============================================================================


struct  BFu7i_BFu8c_BFu1i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu8c_BFu1i) C1{ Fi:7 Fc:8 Fi:1}



static void Test_BFu7i_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu1i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu1i, BFu7i_BFu8c_BFu1i)
//============================================================================


struct  BFu7i_BFu8c_BFu1ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu8c_BFu1ll) C1{ Fi:7 Fc:8 FL:1}



static void Test_BFu7i_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu1ll, BFu7i_BFu8c_BFu1ll)
//============================================================================


struct  BFu7i_BFu8c_BFu1s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu8c_BFu1s) C1{ Fi:7 Fc:8 Fs:1}



static void Test_BFu7i_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu1s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu1s, BFu7i_BFu8c_BFu1s)
//============================================================================


struct  BFu7i_BFu8c_BFu31i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu8c_BFu31i) C1{ Fi:7 Fc:8 Fi:31}



static void Test_BFu7i_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu31i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu31i, BFu7i_BFu8c_BFu31i)
//============================================================================


struct  BFu7i_BFu8c_BFu31ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu8c_BFu31ll) C1{ Fi:7 Fc:8 FL:31}



static void Test_BFu7i_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu31ll, BFu7i_BFu8c_BFu31ll)
//============================================================================


struct  BFu7i_BFu8c_BFu32i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu8c_BFu32i) C1{ Fi:7 Fc:8 Fi:32}



static void Test_BFu7i_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu32i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu32i, BFu7i_BFu8c_BFu32i)
//============================================================================


struct  BFu7i_BFu8c_BFu32ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu8c_BFu32ll) C1{ Fi:7 Fc:8 FL:32}



static void Test_BFu7i_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu32ll, BFu7i_BFu8c_BFu32ll)
//============================================================================


struct  BFu7i_BFu8c_BFu33  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu8c_BFu33) C1{ Fi:7 Fc:8 FL:33}



static void Test_BFu7i_BFu8c_BFu33()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu33");
    static STRUCT_IF_C BFu7i_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu33, BFu7i_BFu8c_BFu33)
//============================================================================


struct  BFu7i_BFu8c_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu8c_BFu7c) C1{ Fi:7 Fc:8 Fc:7}



static void Test_BFu7i_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu8c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu7c, BFu7i_BFu8c_BFu7c)
//============================================================================


struct  BFu7i_BFu8c_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu8c_BFu7i) C1{ Fi:7 Fc:8 Fi:7}



static void Test_BFu7i_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu7i, BFu7i_BFu8c_BFu7i)
//============================================================================


struct  BFu7i_BFu8c_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu8c_BFu7ll) C1{ Fi:7 Fc:8 FL:7}



static void Test_BFu7i_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu7ll, BFu7i_BFu8c_BFu7ll)
//============================================================================


struct  BFu7i_BFu8c_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu8c_BFu7s) C1{ Fi:7 Fc:8 Fs:7}



static void Test_BFu7i_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu7s, BFu7i_BFu8c_BFu7s)
//============================================================================


struct  BFu7i_BFu8c_BFu8c  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu8c_BFu8c) C1{ Fi:7 Fc:8 Fc:8}



static void Test_BFu7i_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu8c");
    static STRUCT_IF_C BFu7i_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu8c, BFu7i_BFu8c_BFu8c)
//============================================================================


struct  BFu7i_BFu8c_BFu8i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu8c_BFu8i) C1{ Fi:7 Fc:8 Fi:8}



static void Test_BFu7i_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu8i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu8i, BFu7i_BFu8c_BFu8i)
//============================================================================


struct  BFu7i_BFu8c_BFu8ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu8c_BFu8ll) C1{ Fi:7 Fc:8 FL:8}



static void Test_BFu7i_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu8ll, BFu7i_BFu8c_BFu8ll)
//============================================================================


struct  BFu7i_BFu8c_BFu8s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu8c_BFu8s) C1{ Fi:7 Fc:8 Fs:8}



static void Test_BFu7i_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu8s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu8s, BFu7i_BFu8c_BFu8s)
//============================================================================


struct  BFu7i_BFu8c_BFu9i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu8c_BFu9i) C1{ Fi:7 Fc:8 Fi:9}



static void Test_BFu7i_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu9i");
    static STRUCT_IF_C BFu7i_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu9i, BFu7i_BFu8c_BFu9i)
//============================================================================


struct  BFu7i_BFu8c_BFu9ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu8c_BFu9ll) C1{ Fi:7 Fc:8 FL:9}



static void Test_BFu7i_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu9ll, BFu7i_BFu8c_BFu9ll)
//============================================================================


struct  BFu7i_BFu8c_BFu9s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu8c_BFu9s) C1{ Fi:7 Fc:8 Fs:9}



static void Test_BFu7i_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu9s");
    static STRUCT_IF_C BFu7i_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_BFu9s, BFu7i_BFu8c_BFu9s)
//============================================================================


struct  BFu7i_BFu8c_C  {
  unsigned int v1:7;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu7i_BFu8c_C) C1{ Fi:7 Fc:8 Fc}



static void Test_BFu7i_BFu8c_C()
{
  {
    init_simple_test("BFu7i_BFu8c_C");
    static STRUCT_IF_C BFu7i_BFu8c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_C, BFu7i_BFu8c_C)
//============================================================================


struct  BFu7i_BFu8c_D  {
  unsigned int v1:7;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu7i_BFu8c_D) C1{ Fi:7 Fc:8 FL}



static void Test_BFu7i_BFu8c_D()
{
  {
    init_simple_test("BFu7i_BFu8c_D");
    static STRUCT_IF_C BFu7i_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_D, BFu7i_BFu8c_D)
//============================================================================


struct  BFu7i_BFu8c_F  {
  unsigned int v1:7;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu7i_BFu8c_F) C1{ Fi:7 Fc:8 Fi}



static void Test_BFu7i_BFu8c_F()
{
  {
    init_simple_test("BFu7i_BFu8c_F");
    static STRUCT_IF_C BFu7i_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_F, BFu7i_BFu8c_F)
//============================================================================


struct  BFu7i_BFu8c_I  {
  unsigned int v1:7;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu7i_BFu8c_I) C1{ Fi:7 Fc:8 Fi}



static void Test_BFu7i_BFu8c_I()
{
  {
    init_simple_test("BFu7i_BFu8c_I");
    static STRUCT_IF_C BFu7i_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_I, BFu7i_BFu8c_I)
//============================================================================


struct  BFu7i_BFu8c_Ip  {
  unsigned int v1:7;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu7i_BFu8c_Ip) C1{ Fi:7 Fc:8 Fp}



static void Test_BFu7i_BFu8c_Ip()
{
  {
    init_simple_test("BFu7i_BFu8c_Ip");
    static STRUCT_IF_C BFu7i_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Ip, BFu7i_BFu8c_Ip)
//============================================================================


struct  BFu7i_BFu8c_L  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu8c_L) C1{ Fi:7 Fc:8 FL}



static void Test_BFu7i_BFu8c_L()
{
  {
    init_simple_test("BFu7i_BFu8c_L");
    static STRUCT_IF_C BFu7i_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_L, BFu7i_BFu8c_L)
//============================================================================


struct  BFu7i_BFu8c_S  {
  unsigned int v1:7;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu7i_BFu8c_S) C1{ Fi:7 Fc:8 Fs}



static void Test_BFu7i_BFu8c_S()
{
  {
    init_simple_test("BFu7i_BFu8c_S");
    static STRUCT_IF_C BFu7i_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_S, BFu7i_BFu8c_S)
//============================================================================


struct  BFu7i_BFu8c_Uc  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu8c_Uc) C1{ Fi:7 Fc:8 Fc}



static void Test_BFu7i_BFu8c_Uc()
{
  {
    init_simple_test("BFu7i_BFu8c_Uc");
    static STRUCT_IF_C BFu7i_BFu8c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Uc, BFu7i_BFu8c_Uc)
//============================================================================


struct  BFu7i_BFu8c_Ui  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu8c_Ui) C1{ Fi:7 Fc:8 Fi}



static void Test_BFu7i_BFu8c_Ui()
{
  {
    init_simple_test("BFu7i_BFu8c_Ui");
    static STRUCT_IF_C BFu7i_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Ui, BFu7i_BFu8c_Ui)
//============================================================================


struct  BFu7i_BFu8c_Ul  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu8c_Ul) C1{ Fi:7 Fc:8 FL}



static void Test_BFu7i_BFu8c_Ul()
{
  {
    init_simple_test("BFu7i_BFu8c_Ul");
    static STRUCT_IF_C BFu7i_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Ul, BFu7i_BFu8c_Ul)
//============================================================================


struct  BFu7i_BFu8c_Us  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu8c_Us) C1{ Fi:7 Fc:8 Fs}



static void Test_BFu7i_BFu8c_Us()
{
  {
    init_simple_test("BFu7i_BFu8c_Us");
    static STRUCT_IF_C BFu7i_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Us, BFu7i_BFu8c_Us)
//============================================================================


struct  BFu7i_BFu8c_Vp  {
  unsigned int v1:7;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu7i_BFu8c_Vp) C1{ Fi:7 Fc:8 Fp}



static void Test_BFu7i_BFu8c_Vp()
{
  {
    init_simple_test("BFu7i_BFu8c_Vp");
    static STRUCT_IF_C BFu7i_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8c_Vp, BFu7i_BFu8c_Vp)
//============================================================================


struct  BFu7i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu7i_BFu8i) C1{ Fi:7 Fi:8}



static void Test_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i, BFu7i_BFu8i)
//============================================================================


struct  BFu7i_BFu8i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu8i_BFu15i) C1{ Fi:7 Fi:8 Fi:15}



static void Test_BFu7i_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu15i, BFu7i_BFu8i_BFu15i)
//============================================================================


struct  BFu7i_BFu8i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu8i_BFu15ll) C1{ Fi:7 Fi:8 FL:15}



static void Test_BFu7i_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu15ll, BFu7i_BFu8i_BFu15ll)
//============================================================================


struct  BFu7i_BFu8i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu8i_BFu15s) C1{ Fi:7 Fi:8 Fs:15}



static void Test_BFu7i_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu15s, BFu7i_BFu8i_BFu15s)
//============================================================================


struct  BFu7i_BFu8i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu8i_BFu16i) C1{ Fi:7 Fi:8 Fi:16}



static void Test_BFu7i_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu16i, BFu7i_BFu8i_BFu16i)
//============================================================================


struct  BFu7i_BFu8i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu8i_BFu16ll) C1{ Fi:7 Fi:8 FL:16}



static void Test_BFu7i_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu16ll, BFu7i_BFu8i_BFu16ll)
//============================================================================


struct  BFu7i_BFu8i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu8i_BFu16s) C1{ Fi:7 Fi:8 Fs:16}



static void Test_BFu7i_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu16s, BFu7i_BFu8i_BFu16s)
//============================================================================


struct  BFu7i_BFu8i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu8i_BFu17i) C1{ Fi:7 Fi:8 Fi:17}



static void Test_BFu7i_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu17i, BFu7i_BFu8i_BFu17i)
//============================================================================


struct  BFu7i_BFu8i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu8i_BFu17ll) C1{ Fi:7 Fi:8 FL:17}



static void Test_BFu7i_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu17ll, BFu7i_BFu8i_BFu17ll)
//============================================================================


struct  BFu7i_BFu8i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu8i_BFu1c) C1{ Fi:7 Fi:8 Fc:1}



static void Test_BFu7i_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu1c, BFu7i_BFu8i_BFu1c)
//============================================================================


struct  BFu7i_BFu8i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu8i_BFu1i) C1{ Fi:7 Fi:8 Fi:1}



static void Test_BFu7i_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu1i, BFu7i_BFu8i_BFu1i)
//============================================================================


struct  BFu7i_BFu8i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu8i_BFu1ll) C1{ Fi:7 Fi:8 FL:1}



static void Test_BFu7i_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu1ll, BFu7i_BFu8i_BFu1ll)
//============================================================================


struct  BFu7i_BFu8i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu8i_BFu1s) C1{ Fi:7 Fi:8 Fs:1}



static void Test_BFu7i_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu1s, BFu7i_BFu8i_BFu1s)
//============================================================================


struct  BFu7i_BFu8i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu8i_BFu31i) C1{ Fi:7 Fi:8 Fi:31}



static void Test_BFu7i_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu31i, BFu7i_BFu8i_BFu31i)
//============================================================================


struct  BFu7i_BFu8i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu8i_BFu31ll) C1{ Fi:7 Fi:8 FL:31}



static void Test_BFu7i_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu31ll, BFu7i_BFu8i_BFu31ll)
//============================================================================


struct  BFu7i_BFu8i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu8i_BFu32i) C1{ Fi:7 Fi:8 Fi:32}



static void Test_BFu7i_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu32i, BFu7i_BFu8i_BFu32i)
//============================================================================


struct  BFu7i_BFu8i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu8i_BFu32ll) C1{ Fi:7 Fi:8 FL:32}



static void Test_BFu7i_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu32ll, BFu7i_BFu8i_BFu32ll)
//============================================================================


struct  BFu7i_BFu8i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu8i_BFu33) C1{ Fi:7 Fi:8 FL:33}



static void Test_BFu7i_BFu8i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu33");
    static STRUCT_IF_C BFu7i_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu33, BFu7i_BFu8i_BFu33)
//============================================================================


struct  BFu7i_BFu8i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu8i_BFu7c) C1{ Fi:7 Fi:8 Fc:7}



static void Test_BFu7i_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu7c, BFu7i_BFu8i_BFu7c)
//============================================================================


struct  BFu7i_BFu8i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu8i_BFu7i) C1{ Fi:7 Fi:8 Fi:7}



static void Test_BFu7i_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu7i, BFu7i_BFu8i_BFu7i)
//============================================================================


struct  BFu7i_BFu8i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu8i_BFu7ll) C1{ Fi:7 Fi:8 FL:7}



static void Test_BFu7i_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu7ll, BFu7i_BFu8i_BFu7ll)
//============================================================================


struct  BFu7i_BFu8i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu8i_BFu7s) C1{ Fi:7 Fi:8 Fs:7}



static void Test_BFu7i_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu7s, BFu7i_BFu8i_BFu7s)
//============================================================================


struct  BFu7i_BFu8i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu8i_BFu8c) C1{ Fi:7 Fi:8 Fc:8}



static void Test_BFu7i_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu8c, BFu7i_BFu8i_BFu8c)
//============================================================================


struct  BFu7i_BFu8i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu8i_BFu8i) C1{ Fi:7 Fi:8 Fi:8}



static void Test_BFu7i_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu8i, BFu7i_BFu8i_BFu8i)
//============================================================================


struct  BFu7i_BFu8i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu8i_BFu8ll) C1{ Fi:7 Fi:8 FL:8}



static void Test_BFu7i_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu8ll, BFu7i_BFu8i_BFu8ll)
//============================================================================


struct  BFu7i_BFu8i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu8i_BFu8s) C1{ Fi:7 Fi:8 Fs:8}



static void Test_BFu7i_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu8s, BFu7i_BFu8i_BFu8s)
//============================================================================


struct  BFu7i_BFu8i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu8i_BFu9i) C1{ Fi:7 Fi:8 Fi:9}



static void Test_BFu7i_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu9i, BFu7i_BFu8i_BFu9i)
//============================================================================


struct  BFu7i_BFu8i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu8i_BFu9ll) C1{ Fi:7 Fi:8 FL:9}



static void Test_BFu7i_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu9ll, BFu7i_BFu8i_BFu9ll)
//============================================================================


struct  BFu7i_BFu8i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu8i_BFu9s) C1{ Fi:7 Fi:8 Fs:9}



static void Test_BFu7i_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_BFu9s, BFu7i_BFu8i_BFu9s)
//============================================================================


struct  BFu7i_BFu8i_C  {
  unsigned int v1:7;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu7i_BFu8i_C) C1{ Fi:7 Fi:8 Fc}



static void Test_BFu7i_BFu8i_C()
{
  {
    init_simple_test("BFu7i_BFu8i_C");
    static STRUCT_IF_C BFu7i_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_C, BFu7i_BFu8i_C)
//============================================================================


struct  BFu7i_BFu8i_D  {
  unsigned int v1:7;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu7i_BFu8i_D) C1{ Fi:7 Fi:8 FL}



static void Test_BFu7i_BFu8i_D()
{
  {
    init_simple_test("BFu7i_BFu8i_D");
    static STRUCT_IF_C BFu7i_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_D, BFu7i_BFu8i_D)
//============================================================================


struct  BFu7i_BFu8i_F  {
  unsigned int v1:7;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu7i_BFu8i_F) C1{ Fi:7 Fi:8 Fi}



static void Test_BFu7i_BFu8i_F()
{
  {
    init_simple_test("BFu7i_BFu8i_F");
    static STRUCT_IF_C BFu7i_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_F, BFu7i_BFu8i_F)
//============================================================================


struct  BFu7i_BFu8i_I  {
  unsigned int v1:7;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu7i_BFu8i_I) C1{ Fi:7 Fi:8 Fi}



static void Test_BFu7i_BFu8i_I()
{
  {
    init_simple_test("BFu7i_BFu8i_I");
    static STRUCT_IF_C BFu7i_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_I, BFu7i_BFu8i_I)
//============================================================================


struct  BFu7i_BFu8i_Ip  {
  unsigned int v1:7;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu7i_BFu8i_Ip) C1{ Fi:7 Fi:8 Fp}



static void Test_BFu7i_BFu8i_Ip()
{
  {
    init_simple_test("BFu7i_BFu8i_Ip");
    static STRUCT_IF_C BFu7i_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Ip, BFu7i_BFu8i_Ip)
//============================================================================


struct  BFu7i_BFu8i_L  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu8i_L) C1{ Fi:7 Fi:8 FL}



static void Test_BFu7i_BFu8i_L()
{
  {
    init_simple_test("BFu7i_BFu8i_L");
    static STRUCT_IF_C BFu7i_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_L, BFu7i_BFu8i_L)
//============================================================================


struct  BFu7i_BFu8i_S  {
  unsigned int v1:7;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu7i_BFu8i_S) C1{ Fi:7 Fi:8 Fs}



static void Test_BFu7i_BFu8i_S()
{
  {
    init_simple_test("BFu7i_BFu8i_S");
    static STRUCT_IF_C BFu7i_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_S, BFu7i_BFu8i_S)
//============================================================================


struct  BFu7i_BFu8i_Uc  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu8i_Uc) C1{ Fi:7 Fi:8 Fc}



static void Test_BFu7i_BFu8i_Uc()
{
  {
    init_simple_test("BFu7i_BFu8i_Uc");
    static STRUCT_IF_C BFu7i_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Uc, BFu7i_BFu8i_Uc)
//============================================================================


struct  BFu7i_BFu8i_Ui  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu8i_Ui) C1{ Fi:7 Fi:8 Fi}



static void Test_BFu7i_BFu8i_Ui()
{
  {
    init_simple_test("BFu7i_BFu8i_Ui");
    static STRUCT_IF_C BFu7i_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Ui, BFu7i_BFu8i_Ui)
//============================================================================


struct  BFu7i_BFu8i_Ul  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu8i_Ul) C1{ Fi:7 Fi:8 FL}



static void Test_BFu7i_BFu8i_Ul()
{
  {
    init_simple_test("BFu7i_BFu8i_Ul");
    static STRUCT_IF_C BFu7i_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Ul, BFu7i_BFu8i_Ul)
//============================================================================


struct  BFu7i_BFu8i_Us  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu8i_Us) C1{ Fi:7 Fi:8 Fs}



static void Test_BFu7i_BFu8i_Us()
{
  {
    init_simple_test("BFu7i_BFu8i_Us");
    static STRUCT_IF_C BFu7i_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Us, BFu7i_BFu8i_Us)
//============================================================================


struct  BFu7i_BFu8i_Vp  {
  unsigned int v1:7;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu7i_BFu8i_Vp) C1{ Fi:7 Fi:8 Fp}



static void Test_BFu7i_BFu8i_Vp()
{
  {
    init_simple_test("BFu7i_BFu8i_Vp");
    static STRUCT_IF_C BFu7i_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8i_Vp, BFu7i_BFu8i_Vp)
//============================================================================


struct  BFu7i_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu7i_BFu8ll) C1{ Fi:7 FL:8}



static void Test_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll, BFu7i_BFu8ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu8ll_BFu15i) C1{ Fi:7 FL:8 Fi:15}



static void Test_BFu7i_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu15i, BFu7i_BFu8ll_BFu15i)
//============================================================================


struct  BFu7i_BFu8ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu8ll_BFu15ll) C1{ Fi:7 FL:8 FL:15}



static void Test_BFu7i_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu15ll, BFu7i_BFu8ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu8ll_BFu15s) C1{ Fi:7 FL:8 Fs:15}



static void Test_BFu7i_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu15s, BFu7i_BFu8ll_BFu15s)
//============================================================================


struct  BFu7i_BFu8ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu8ll_BFu16i) C1{ Fi:7 FL:8 Fi:16}



static void Test_BFu7i_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu16i, BFu7i_BFu8ll_BFu16i)
//============================================================================


struct  BFu7i_BFu8ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu8ll_BFu16ll) C1{ Fi:7 FL:8 FL:16}



static void Test_BFu7i_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu16ll, BFu7i_BFu8ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu8ll_BFu16s) C1{ Fi:7 FL:8 Fs:16}



static void Test_BFu7i_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu16s, BFu7i_BFu8ll_BFu16s)
//============================================================================


struct  BFu7i_BFu8ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu8ll_BFu17i) C1{ Fi:7 FL:8 Fi:17}



static void Test_BFu7i_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu17i, BFu7i_BFu8ll_BFu17i)
//============================================================================


struct  BFu7i_BFu8ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu8ll_BFu17ll) C1{ Fi:7 FL:8 FL:17}



static void Test_BFu7i_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu17ll, BFu7i_BFu8ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu8ll_BFu1c) C1{ Fi:7 FL:8 Fc:1}



static void Test_BFu7i_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu1c, BFu7i_BFu8ll_BFu1c)
//============================================================================


struct  BFu7i_BFu8ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu8ll_BFu1i) C1{ Fi:7 FL:8 Fi:1}



static void Test_BFu7i_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu1i, BFu7i_BFu8ll_BFu1i)
//============================================================================


struct  BFu7i_BFu8ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu8ll_BFu1ll) C1{ Fi:7 FL:8 FL:1}



static void Test_BFu7i_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu1ll, BFu7i_BFu8ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu8ll_BFu1s) C1{ Fi:7 FL:8 Fs:1}



static void Test_BFu7i_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu1s, BFu7i_BFu8ll_BFu1s)
//============================================================================


struct  BFu7i_BFu8ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu8ll_BFu31i) C1{ Fi:7 FL:8 Fi:31}



static void Test_BFu7i_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu31i, BFu7i_BFu8ll_BFu31i)
//============================================================================


struct  BFu7i_BFu8ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu8ll_BFu31ll) C1{ Fi:7 FL:8 FL:31}



static void Test_BFu7i_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu31ll, BFu7i_BFu8ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu8ll_BFu32i) C1{ Fi:7 FL:8 Fi:32}



static void Test_BFu7i_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu32i, BFu7i_BFu8ll_BFu32i)
//============================================================================


struct  BFu7i_BFu8ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu8ll_BFu32ll) C1{ Fi:7 FL:8 FL:32}



static void Test_BFu7i_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu32ll, BFu7i_BFu8ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu8ll_BFu33) C1{ Fi:7 FL:8 FL:33}



static void Test_BFu7i_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu33, BFu7i_BFu8ll_BFu33)
//============================================================================


struct  BFu7i_BFu8ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu8ll_BFu7c) C1{ Fi:7 FL:8 Fc:7}



static void Test_BFu7i_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu7c, BFu7i_BFu8ll_BFu7c)
//============================================================================


struct  BFu7i_BFu8ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu8ll_BFu7i) C1{ Fi:7 FL:8 Fi:7}



static void Test_BFu7i_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu7i, BFu7i_BFu8ll_BFu7i)
//============================================================================


struct  BFu7i_BFu8ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu8ll_BFu7ll) C1{ Fi:7 FL:8 FL:7}



static void Test_BFu7i_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu7ll, BFu7i_BFu8ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu8ll_BFu7s) C1{ Fi:7 FL:8 Fs:7}



static void Test_BFu7i_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu7s, BFu7i_BFu8ll_BFu7s)
//============================================================================


struct  BFu7i_BFu8ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu8ll_BFu8c) C1{ Fi:7 FL:8 Fc:8}



static void Test_BFu7i_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu8c, BFu7i_BFu8ll_BFu8c)
//============================================================================


struct  BFu7i_BFu8ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu8ll_BFu8i) C1{ Fi:7 FL:8 Fi:8}



static void Test_BFu7i_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu8i, BFu7i_BFu8ll_BFu8i)
//============================================================================


struct  BFu7i_BFu8ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu8ll_BFu8ll) C1{ Fi:7 FL:8 FL:8}



static void Test_BFu7i_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu8ll, BFu7i_BFu8ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu8ll_BFu8s) C1{ Fi:7 FL:8 Fs:8}



static void Test_BFu7i_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu8s, BFu7i_BFu8ll_BFu8s)
//============================================================================


struct  BFu7i_BFu8ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu8ll_BFu9i) C1{ Fi:7 FL:8 Fi:9}



static void Test_BFu7i_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu9i, BFu7i_BFu8ll_BFu9i)
//============================================================================


struct  BFu7i_BFu8ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu8ll_BFu9ll) C1{ Fi:7 FL:8 FL:9}



static void Test_BFu7i_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu9ll, BFu7i_BFu8ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu8ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu8ll_BFu9s) C1{ Fi:7 FL:8 Fs:9}



static void Test_BFu7i_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_BFu9s, BFu7i_BFu8ll_BFu9s)
//============================================================================


struct  BFu7i_BFu8ll_C  {
  unsigned int v1:7;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu7i_BFu8ll_C) C1{ Fi:7 FL:8 Fc}



static void Test_BFu7i_BFu8ll_C()
{
  {
    init_simple_test("BFu7i_BFu8ll_C");
    static STRUCT_IF_C BFu7i_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_C, BFu7i_BFu8ll_C)
//============================================================================


struct  BFu7i_BFu8ll_D  {
  unsigned int v1:7;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu7i_BFu8ll_D) C1{ Fi:7 FL:8 FL}



static void Test_BFu7i_BFu8ll_D()
{
  {
    init_simple_test("BFu7i_BFu8ll_D");
    static STRUCT_IF_C BFu7i_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_D, BFu7i_BFu8ll_D)
//============================================================================


struct  BFu7i_BFu8ll_F  {
  unsigned int v1:7;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu7i_BFu8ll_F) C1{ Fi:7 FL:8 Fi}



static void Test_BFu7i_BFu8ll_F()
{
  {
    init_simple_test("BFu7i_BFu8ll_F");
    static STRUCT_IF_C BFu7i_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_F, BFu7i_BFu8ll_F)
//============================================================================


struct  BFu7i_BFu8ll_I  {
  unsigned int v1:7;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu7i_BFu8ll_I) C1{ Fi:7 FL:8 Fi}



static void Test_BFu7i_BFu8ll_I()
{
  {
    init_simple_test("BFu7i_BFu8ll_I");
    static STRUCT_IF_C BFu7i_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_I, BFu7i_BFu8ll_I)
//============================================================================


struct  BFu7i_BFu8ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu7i_BFu8ll_Ip) C1{ Fi:7 FL:8 Fp}



static void Test_BFu7i_BFu8ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu8ll_Ip");
    static STRUCT_IF_C BFu7i_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Ip, BFu7i_BFu8ll_Ip)
//============================================================================


struct  BFu7i_BFu8ll_L  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu8ll_L) C1{ Fi:7 FL:8 FL}



static void Test_BFu7i_BFu8ll_L()
{
  {
    init_simple_test("BFu7i_BFu8ll_L");
    static STRUCT_IF_C BFu7i_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_L, BFu7i_BFu8ll_L)
//============================================================================


struct  BFu7i_BFu8ll_S  {
  unsigned int v1:7;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu7i_BFu8ll_S) C1{ Fi:7 FL:8 Fs}



static void Test_BFu7i_BFu8ll_S()
{
  {
    init_simple_test("BFu7i_BFu8ll_S");
    static STRUCT_IF_C BFu7i_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_S, BFu7i_BFu8ll_S)
//============================================================================


struct  BFu7i_BFu8ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu8ll_Uc) C1{ Fi:7 FL:8 Fc}



static void Test_BFu7i_BFu8ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu8ll_Uc");
    static STRUCT_IF_C BFu7i_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Uc, BFu7i_BFu8ll_Uc)
//============================================================================


struct  BFu7i_BFu8ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu8ll_Ui) C1{ Fi:7 FL:8 Fi}



static void Test_BFu7i_BFu8ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu8ll_Ui");
    static STRUCT_IF_C BFu7i_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Ui, BFu7i_BFu8ll_Ui)
//============================================================================


struct  BFu7i_BFu8ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu8ll_Ul) C1{ Fi:7 FL:8 FL}



static void Test_BFu7i_BFu8ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu8ll_Ul");
    static STRUCT_IF_C BFu7i_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Ul, BFu7i_BFu8ll_Ul)
//============================================================================


struct  BFu7i_BFu8ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu8ll_Us) C1{ Fi:7 FL:8 Fs}



static void Test_BFu7i_BFu8ll_Us()
{
  {
    init_simple_test("BFu7i_BFu8ll_Us");
    static STRUCT_IF_C BFu7i_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Us, BFu7i_BFu8ll_Us)
//============================================================================


struct  BFu7i_BFu8ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu7i_BFu8ll_Vp) C1{ Fi:7 FL:8 Fp}



static void Test_BFu7i_BFu8ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu8ll_Vp");
    static STRUCT_IF_C BFu7i_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8ll_Vp, BFu7i_BFu8ll_Vp)
//============================================================================


struct  BFu7i_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu7i_BFu8s) C1{ Fi:7 Fs:8}



static void Test_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s, BFu7i_BFu8s)
//============================================================================


struct  BFu7i_BFu8s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu8s_BFu15i) C1{ Fi:7 Fs:8 Fi:15}



static void Test_BFu7i_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu15i, BFu7i_BFu8s_BFu15i)
//============================================================================


struct  BFu7i_BFu8s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu8s_BFu15ll) C1{ Fi:7 Fs:8 FL:15}



static void Test_BFu7i_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu15ll, BFu7i_BFu8s_BFu15ll)
//============================================================================


struct  BFu7i_BFu8s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu8s_BFu15s) C1{ Fi:7 Fs:8 Fs:15}



static void Test_BFu7i_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu15s, BFu7i_BFu8s_BFu15s)
//============================================================================


struct  BFu7i_BFu8s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu8s_BFu16i) C1{ Fi:7 Fs:8 Fi:16}



static void Test_BFu7i_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu16i, BFu7i_BFu8s_BFu16i)
//============================================================================


struct  BFu7i_BFu8s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu8s_BFu16ll) C1{ Fi:7 Fs:8 FL:16}



static void Test_BFu7i_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu16ll, BFu7i_BFu8s_BFu16ll)
//============================================================================


struct  BFu7i_BFu8s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu8s_BFu16s) C1{ Fi:7 Fs:8 Fs:16}



static void Test_BFu7i_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu16s, BFu7i_BFu8s_BFu16s)
//============================================================================


struct  BFu7i_BFu8s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu8s_BFu17i) C1{ Fi:7 Fs:8 Fi:17}



static void Test_BFu7i_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu17i, BFu7i_BFu8s_BFu17i)
//============================================================================


struct  BFu7i_BFu8s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu8s_BFu17ll) C1{ Fi:7 Fs:8 FL:17}



static void Test_BFu7i_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu17ll, BFu7i_BFu8s_BFu17ll)
//============================================================================


struct  BFu7i_BFu8s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu8s_BFu1c) C1{ Fi:7 Fs:8 Fc:1}



static void Test_BFu7i_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu1c, BFu7i_BFu8s_BFu1c)
//============================================================================


struct  BFu7i_BFu8s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu8s_BFu1i) C1{ Fi:7 Fs:8 Fi:1}



static void Test_BFu7i_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu1i, BFu7i_BFu8s_BFu1i)
//============================================================================


struct  BFu7i_BFu8s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu8s_BFu1ll) C1{ Fi:7 Fs:8 FL:1}



static void Test_BFu7i_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu1ll, BFu7i_BFu8s_BFu1ll)
//============================================================================


struct  BFu7i_BFu8s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu8s_BFu1s) C1{ Fi:7 Fs:8 Fs:1}



static void Test_BFu7i_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7i_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu1s, BFu7i_BFu8s_BFu1s)
//============================================================================


struct  BFu7i_BFu8s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu8s_BFu31i) C1{ Fi:7 Fs:8 Fi:31}



static void Test_BFu7i_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu31i, BFu7i_BFu8s_BFu31i)
//============================================================================


struct  BFu7i_BFu8s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu8s_BFu31ll) C1{ Fi:7 Fs:8 FL:31}



static void Test_BFu7i_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu31ll, BFu7i_BFu8s_BFu31ll)
//============================================================================


struct  BFu7i_BFu8s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu8s_BFu32i) C1{ Fi:7 Fs:8 Fi:32}



static void Test_BFu7i_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu32i, BFu7i_BFu8s_BFu32i)
//============================================================================


struct  BFu7i_BFu8s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu8s_BFu32ll) C1{ Fi:7 Fs:8 FL:32}



static void Test_BFu7i_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu32ll, BFu7i_BFu8s_BFu32ll)
//============================================================================


struct  BFu7i_BFu8s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu8s_BFu33) C1{ Fi:7 Fs:8 FL:33}



static void Test_BFu7i_BFu8s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu33");
    static STRUCT_IF_C BFu7i_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu33, BFu7i_BFu8s_BFu33)
//============================================================================


struct  BFu7i_BFu8s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu8s_BFu7c) C1{ Fi:7 Fs:8 Fc:7}



static void Test_BFu7i_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu7c, BFu7i_BFu8s_BFu7c)
//============================================================================


struct  BFu7i_BFu8s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu8s_BFu7i) C1{ Fi:7 Fs:8 Fi:7}



static void Test_BFu7i_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu7i, BFu7i_BFu8s_BFu7i)
//============================================================================


struct  BFu7i_BFu8s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu8s_BFu7ll) C1{ Fi:7 Fs:8 FL:7}



static void Test_BFu7i_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu7ll, BFu7i_BFu8s_BFu7ll)
//============================================================================


struct  BFu7i_BFu8s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu8s_BFu7s) C1{ Fi:7 Fs:8 Fs:7}



static void Test_BFu7i_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu7s, BFu7i_BFu8s_BFu7s)
//============================================================================


struct  BFu7i_BFu8s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu8s_BFu8c) C1{ Fi:7 Fs:8 Fc:8}



static void Test_BFu7i_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu8c, BFu7i_BFu8s_BFu8c)
//============================================================================


struct  BFu7i_BFu8s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu8s_BFu8i) C1{ Fi:7 Fs:8 Fi:8}



static void Test_BFu7i_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu8i, BFu7i_BFu8s_BFu8i)
//============================================================================


struct  BFu7i_BFu8s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu8s_BFu8ll) C1{ Fi:7 Fs:8 FL:8}



static void Test_BFu7i_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu8ll, BFu7i_BFu8s_BFu8ll)
//============================================================================


struct  BFu7i_BFu8s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu8s_BFu8s) C1{ Fi:7 Fs:8 Fs:8}



static void Test_BFu7i_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu8s, BFu7i_BFu8s_BFu8s)
//============================================================================


struct  BFu7i_BFu8s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu8s_BFu9i) C1{ Fi:7 Fs:8 Fi:9}



static void Test_BFu7i_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu9i, BFu7i_BFu8s_BFu9i)
//============================================================================


struct  BFu7i_BFu8s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu8s_BFu9ll) C1{ Fi:7 Fs:8 FL:9}



static void Test_BFu7i_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu9ll, BFu7i_BFu8s_BFu9ll)
//============================================================================


struct  BFu7i_BFu8s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu8s_BFu9s) C1{ Fi:7 Fs:8 Fs:9}



static void Test_BFu7i_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_BFu9s, BFu7i_BFu8s_BFu9s)
//============================================================================


struct  BFu7i_BFu8s_C  {
  unsigned int v1:7;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu7i_BFu8s_C) C1{ Fi:7 Fs:8 Fc}



static void Test_BFu7i_BFu8s_C()
{
  {
    init_simple_test("BFu7i_BFu8s_C");
    static STRUCT_IF_C BFu7i_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_C, BFu7i_BFu8s_C)
//============================================================================


struct  BFu7i_BFu8s_D  {
  unsigned int v1:7;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu7i_BFu8s_D) C1{ Fi:7 Fs:8 FL}



static void Test_BFu7i_BFu8s_D()
{
  {
    init_simple_test("BFu7i_BFu8s_D");
    static STRUCT_IF_C BFu7i_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_D, BFu7i_BFu8s_D)
//============================================================================


struct  BFu7i_BFu8s_F  {
  unsigned int v1:7;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu7i_BFu8s_F) C1{ Fi:7 Fs:8 Fi}



static void Test_BFu7i_BFu8s_F()
{
  {
    init_simple_test("BFu7i_BFu8s_F");
    static STRUCT_IF_C BFu7i_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_F, BFu7i_BFu8s_F)
//============================================================================


struct  BFu7i_BFu8s_I  {
  unsigned int v1:7;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu7i_BFu8s_I) C1{ Fi:7 Fs:8 Fi}



static void Test_BFu7i_BFu8s_I()
{
  {
    init_simple_test("BFu7i_BFu8s_I");
    static STRUCT_IF_C BFu7i_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_I, BFu7i_BFu8s_I)
//============================================================================


struct  BFu7i_BFu8s_Ip  {
  unsigned int v1:7;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu7i_BFu8s_Ip) C1{ Fi:7 Fs:8 Fp}



static void Test_BFu7i_BFu8s_Ip()
{
  {
    init_simple_test("BFu7i_BFu8s_Ip");
    static STRUCT_IF_C BFu7i_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Ip, BFu7i_BFu8s_Ip)
//============================================================================


struct  BFu7i_BFu8s_L  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu8s_L) C1{ Fi:7 Fs:8 FL}



static void Test_BFu7i_BFu8s_L()
{
  {
    init_simple_test("BFu7i_BFu8s_L");
    static STRUCT_IF_C BFu7i_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_L, BFu7i_BFu8s_L)
//============================================================================


struct  BFu7i_BFu8s_S  {
  unsigned int v1:7;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu7i_BFu8s_S) C1{ Fi:7 Fs:8 Fs}



static void Test_BFu7i_BFu8s_S()
{
  {
    init_simple_test("BFu7i_BFu8s_S");
    static STRUCT_IF_C BFu7i_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_S, BFu7i_BFu8s_S)
//============================================================================


struct  BFu7i_BFu8s_Uc  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu8s_Uc) C1{ Fi:7 Fs:8 Fc}



static void Test_BFu7i_BFu8s_Uc()
{
  {
    init_simple_test("BFu7i_BFu8s_Uc");
    static STRUCT_IF_C BFu7i_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Uc, BFu7i_BFu8s_Uc)
//============================================================================


struct  BFu7i_BFu8s_Ui  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu8s_Ui) C1{ Fi:7 Fs:8 Fi}



static void Test_BFu7i_BFu8s_Ui()
{
  {
    init_simple_test("BFu7i_BFu8s_Ui");
    static STRUCT_IF_C BFu7i_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Ui, BFu7i_BFu8s_Ui)
//============================================================================


struct  BFu7i_BFu8s_Ul  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu8s_Ul) C1{ Fi:7 Fs:8 FL}



static void Test_BFu7i_BFu8s_Ul()
{
  {
    init_simple_test("BFu7i_BFu8s_Ul");
    static STRUCT_IF_C BFu7i_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Ul, BFu7i_BFu8s_Ul)
//============================================================================


struct  BFu7i_BFu8s_Us  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu8s_Us) C1{ Fi:7 Fs:8 Fs}



static void Test_BFu7i_BFu8s_Us()
{
  {
    init_simple_test("BFu7i_BFu8s_Us");
    static STRUCT_IF_C BFu7i_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Us, BFu7i_BFu8s_Us)
//============================================================================


struct  BFu7i_BFu8s_Vp  {
  unsigned int v1:7;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu7i_BFu8s_Vp) C1{ Fi:7 Fs:8 Fp}



static void Test_BFu7i_BFu8s_Vp()
{
  {
    init_simple_test("BFu7i_BFu8s_Vp");
    static STRUCT_IF_C BFu7i_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu8s_Vp, BFu7i_BFu8s_Vp)
//============================================================================


struct  BFu7i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu7i_BFu9i) C1{ Fi:7 Fi:9}



static void Test_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i, BFu7i_BFu9i)
//============================================================================


struct  BFu7i_BFu9i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu9i_BFu15i) C1{ Fi:7 Fi:9 Fi:15}



static void Test_BFu7i_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu15i, BFu7i_BFu9i_BFu15i)
//============================================================================


struct  BFu7i_BFu9i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu9i_BFu15ll) C1{ Fi:7 Fi:9 FL:15}



static void Test_BFu7i_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu15ll, BFu7i_BFu9i_BFu15ll)
//============================================================================


struct  BFu7i_BFu9i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu9i_BFu15s) C1{ Fi:7 Fi:9 Fs:15}



static void Test_BFu7i_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu15s, BFu7i_BFu9i_BFu15s)
//============================================================================


struct  BFu7i_BFu9i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu9i_BFu16i) C1{ Fi:7 Fi:9 Fi:16}



static void Test_BFu7i_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu16i, BFu7i_BFu9i_BFu16i)
//============================================================================


struct  BFu7i_BFu9i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu9i_BFu16ll) C1{ Fi:7 Fi:9 FL:16}



static void Test_BFu7i_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu16ll, BFu7i_BFu9i_BFu16ll)
//============================================================================


struct  BFu7i_BFu9i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu9i_BFu16s) C1{ Fi:7 Fi:9 Fs:16}



static void Test_BFu7i_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu16s, BFu7i_BFu9i_BFu16s)
//============================================================================


struct  BFu7i_BFu9i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu9i_BFu17i) C1{ Fi:7 Fi:9 Fi:17}



static void Test_BFu7i_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu17i, BFu7i_BFu9i_BFu17i)
//============================================================================


struct  BFu7i_BFu9i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu9i_BFu17ll) C1{ Fi:7 Fi:9 FL:17}



static void Test_BFu7i_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu17ll, BFu7i_BFu9i_BFu17ll)
//============================================================================


struct  BFu7i_BFu9i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu9i_BFu1c) C1{ Fi:7 Fi:9 Fc:1}



static void Test_BFu7i_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu1c, BFu7i_BFu9i_BFu1c)
//============================================================================


struct  BFu7i_BFu9i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu9i_BFu1i) C1{ Fi:7 Fi:9 Fi:1}



static void Test_BFu7i_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu1i, BFu7i_BFu9i_BFu1i)
//============================================================================


struct  BFu7i_BFu9i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu9i_BFu1ll) C1{ Fi:7 Fi:9 FL:1}



static void Test_BFu7i_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu1ll, BFu7i_BFu9i_BFu1ll)
//============================================================================


struct  BFu7i_BFu9i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu9i_BFu1s) C1{ Fi:7 Fi:9 Fs:1}



static void Test_BFu7i_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu1s, BFu7i_BFu9i_BFu1s)
//============================================================================


struct  BFu7i_BFu9i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu9i_BFu31i) C1{ Fi:7 Fi:9 Fi:31}



static void Test_BFu7i_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu31i, BFu7i_BFu9i_BFu31i)
//============================================================================


struct  BFu7i_BFu9i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu9i_BFu31ll) C1{ Fi:7 Fi:9 FL:31}



static void Test_BFu7i_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu31ll, BFu7i_BFu9i_BFu31ll)
//============================================================================


struct  BFu7i_BFu9i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu9i_BFu32i) C1{ Fi:7 Fi:9 Fi:32}



static void Test_BFu7i_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu32i, BFu7i_BFu9i_BFu32i)
//============================================================================


struct  BFu7i_BFu9i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu9i_BFu32ll) C1{ Fi:7 Fi:9 FL:32}



static void Test_BFu7i_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu32ll, BFu7i_BFu9i_BFu32ll)
//============================================================================


struct  BFu7i_BFu9i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu9i_BFu33) C1{ Fi:7 Fi:9 FL:33}



static void Test_BFu7i_BFu9i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu33");
    static STRUCT_IF_C BFu7i_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu33, BFu7i_BFu9i_BFu33)
//============================================================================


struct  BFu7i_BFu9i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu9i_BFu7c) C1{ Fi:7 Fi:9 Fc:7}



static void Test_BFu7i_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu7c, BFu7i_BFu9i_BFu7c)
//============================================================================


struct  BFu7i_BFu9i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu9i_BFu7i) C1{ Fi:7 Fi:9 Fi:7}



static void Test_BFu7i_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu7i, BFu7i_BFu9i_BFu7i)
//============================================================================


struct  BFu7i_BFu9i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu9i_BFu7ll) C1{ Fi:7 Fi:9 FL:7}



static void Test_BFu7i_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu7ll, BFu7i_BFu9i_BFu7ll)
//============================================================================


struct  BFu7i_BFu9i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu9i_BFu7s) C1{ Fi:7 Fi:9 Fs:7}



static void Test_BFu7i_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu7s, BFu7i_BFu9i_BFu7s)
//============================================================================


struct  BFu7i_BFu9i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu9i_BFu8c) C1{ Fi:7 Fi:9 Fc:8}



static void Test_BFu7i_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu8c, BFu7i_BFu9i_BFu8c)
//============================================================================


struct  BFu7i_BFu9i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu9i_BFu8i) C1{ Fi:7 Fi:9 Fi:8}



static void Test_BFu7i_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu8i, BFu7i_BFu9i_BFu8i)
//============================================================================


struct  BFu7i_BFu9i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu9i_BFu8ll) C1{ Fi:7 Fi:9 FL:8}



static void Test_BFu7i_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu8ll, BFu7i_BFu9i_BFu8ll)
//============================================================================


struct  BFu7i_BFu9i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu9i_BFu8s) C1{ Fi:7 Fi:9 Fs:8}



static void Test_BFu7i_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu8s, BFu7i_BFu9i_BFu8s)
//============================================================================


struct  BFu7i_BFu9i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu9i_BFu9i) C1{ Fi:7 Fi:9 Fi:9}



static void Test_BFu7i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu9i, BFu7i_BFu9i_BFu9i)
//============================================================================


struct  BFu7i_BFu9i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu9i_BFu9ll) C1{ Fi:7 Fi:9 FL:9}



static void Test_BFu7i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu9ll, BFu7i_BFu9i_BFu9ll)
//============================================================================


struct  BFu7i_BFu9i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu9i_BFu9s) C1{ Fi:7 Fi:9 Fs:9}



static void Test_BFu7i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_BFu9s, BFu7i_BFu9i_BFu9s)
//============================================================================


struct  BFu7i_BFu9i_C  {
  unsigned int v1:7;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu7i_BFu9i_C) C1{ Fi:7 Fi:9 Fc}



static void Test_BFu7i_BFu9i_C()
{
  {
    init_simple_test("BFu7i_BFu9i_C");
    static STRUCT_IF_C BFu7i_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_C, BFu7i_BFu9i_C)
//============================================================================


struct  BFu7i_BFu9i_D  {
  unsigned int v1:7;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu7i_BFu9i_D) C1{ Fi:7 Fi:9 FL}



static void Test_BFu7i_BFu9i_D()
{
  {
    init_simple_test("BFu7i_BFu9i_D");
    static STRUCT_IF_C BFu7i_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_D, BFu7i_BFu9i_D)
//============================================================================


struct  BFu7i_BFu9i_F  {
  unsigned int v1:7;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu7i_BFu9i_F) C1{ Fi:7 Fi:9 Fi}



static void Test_BFu7i_BFu9i_F()
{
  {
    init_simple_test("BFu7i_BFu9i_F");
    static STRUCT_IF_C BFu7i_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_F, BFu7i_BFu9i_F)
//============================================================================


struct  BFu7i_BFu9i_I  {
  unsigned int v1:7;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu7i_BFu9i_I) C1{ Fi:7 Fi:9 Fi}



static void Test_BFu7i_BFu9i_I()
{
  {
    init_simple_test("BFu7i_BFu9i_I");
    static STRUCT_IF_C BFu7i_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_I, BFu7i_BFu9i_I)
//============================================================================


struct  BFu7i_BFu9i_Ip  {
  unsigned int v1:7;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu7i_BFu9i_Ip) C1{ Fi:7 Fi:9 Fp}



static void Test_BFu7i_BFu9i_Ip()
{
  {
    init_simple_test("BFu7i_BFu9i_Ip");
    static STRUCT_IF_C BFu7i_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Ip, BFu7i_BFu9i_Ip)
//============================================================================


struct  BFu7i_BFu9i_L  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu9i_L) C1{ Fi:7 Fi:9 FL}



static void Test_BFu7i_BFu9i_L()
{
  {
    init_simple_test("BFu7i_BFu9i_L");
    static STRUCT_IF_C BFu7i_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_L, BFu7i_BFu9i_L)
//============================================================================


struct  BFu7i_BFu9i_S  {
  unsigned int v1:7;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu7i_BFu9i_S) C1{ Fi:7 Fi:9 Fs}



static void Test_BFu7i_BFu9i_S()
{
  {
    init_simple_test("BFu7i_BFu9i_S");
    static STRUCT_IF_C BFu7i_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_S, BFu7i_BFu9i_S)
//============================================================================


struct  BFu7i_BFu9i_Uc  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu9i_Uc) C1{ Fi:7 Fi:9 Fc}



static void Test_BFu7i_BFu9i_Uc()
{
  {
    init_simple_test("BFu7i_BFu9i_Uc");
    static STRUCT_IF_C BFu7i_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Uc, BFu7i_BFu9i_Uc)
//============================================================================


struct  BFu7i_BFu9i_Ui  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu9i_Ui) C1{ Fi:7 Fi:9 Fi}



static void Test_BFu7i_BFu9i_Ui()
{
  {
    init_simple_test("BFu7i_BFu9i_Ui");
    static STRUCT_IF_C BFu7i_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Ui, BFu7i_BFu9i_Ui)
//============================================================================


struct  BFu7i_BFu9i_Ul  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu9i_Ul) C1{ Fi:7 Fi:9 FL}



static void Test_BFu7i_BFu9i_Ul()
{
  {
    init_simple_test("BFu7i_BFu9i_Ul");
    static STRUCT_IF_C BFu7i_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Ul, BFu7i_BFu9i_Ul)
//============================================================================


struct  BFu7i_BFu9i_Us  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu9i_Us) C1{ Fi:7 Fi:9 Fs}



static void Test_BFu7i_BFu9i_Us()
{
  {
    init_simple_test("BFu7i_BFu9i_Us");
    static STRUCT_IF_C BFu7i_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Us, BFu7i_BFu9i_Us)
//============================================================================


struct  BFu7i_BFu9i_Vp  {
  unsigned int v1:7;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu7i_BFu9i_Vp) C1{ Fi:7 Fi:9 Fp}



static void Test_BFu7i_BFu9i_Vp()
{
  {
    init_simple_test("BFu7i_BFu9i_Vp");
    static STRUCT_IF_C BFu7i_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9i_Vp, BFu7i_BFu9i_Vp)
//============================================================================


struct  BFu7i_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu7i_BFu9ll) C1{ Fi:7 FL:9}



static void Test_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll, BFu7i_BFu9ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu9ll_BFu15i) C1{ Fi:7 FL:9 Fi:15}



static void Test_BFu7i_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu15i, BFu7i_BFu9ll_BFu15i)
//============================================================================


struct  BFu7i_BFu9ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu9ll_BFu15ll) C1{ Fi:7 FL:9 FL:15}



static void Test_BFu7i_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu15ll, BFu7i_BFu9ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu9ll_BFu15s) C1{ Fi:7 FL:9 Fs:15}



static void Test_BFu7i_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu15s, BFu7i_BFu9ll_BFu15s)
//============================================================================


struct  BFu7i_BFu9ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu9ll_BFu16i) C1{ Fi:7 FL:9 Fi:16}



static void Test_BFu7i_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu16i, BFu7i_BFu9ll_BFu16i)
//============================================================================


struct  BFu7i_BFu9ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu9ll_BFu16ll) C1{ Fi:7 FL:9 FL:16}



static void Test_BFu7i_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu16ll, BFu7i_BFu9ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu9ll_BFu16s) C1{ Fi:7 FL:9 Fs:16}



static void Test_BFu7i_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu16s, BFu7i_BFu9ll_BFu16s)
//============================================================================


struct  BFu7i_BFu9ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu9ll_BFu17i) C1{ Fi:7 FL:9 Fi:17}



static void Test_BFu7i_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu17i, BFu7i_BFu9ll_BFu17i)
//============================================================================


struct  BFu7i_BFu9ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu9ll_BFu17ll) C1{ Fi:7 FL:9 FL:17}



static void Test_BFu7i_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu17ll, BFu7i_BFu9ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu9ll_BFu1c) C1{ Fi:7 FL:9 Fc:1}



static void Test_BFu7i_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu1c, BFu7i_BFu9ll_BFu1c)
//============================================================================


struct  BFu7i_BFu9ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu9ll_BFu1i) C1{ Fi:7 FL:9 Fi:1}



static void Test_BFu7i_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu1i, BFu7i_BFu9ll_BFu1i)
//============================================================================


struct  BFu7i_BFu9ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu9ll_BFu1ll) C1{ Fi:7 FL:9 FL:1}



static void Test_BFu7i_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu1ll, BFu7i_BFu9ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu9ll_BFu1s) C1{ Fi:7 FL:9 Fs:1}



static void Test_BFu7i_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu1s, BFu7i_BFu9ll_BFu1s)
//============================================================================


struct  BFu7i_BFu9ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu9ll_BFu31i) C1{ Fi:7 FL:9 Fi:31}



static void Test_BFu7i_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu31i, BFu7i_BFu9ll_BFu31i)
//============================================================================


struct  BFu7i_BFu9ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu9ll_BFu31ll) C1{ Fi:7 FL:9 FL:31}



static void Test_BFu7i_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu31ll, BFu7i_BFu9ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu9ll_BFu32i) C1{ Fi:7 FL:9 Fi:32}



static void Test_BFu7i_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu32i, BFu7i_BFu9ll_BFu32i)
//============================================================================


struct  BFu7i_BFu9ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu9ll_BFu32ll) C1{ Fi:7 FL:9 FL:32}



static void Test_BFu7i_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu32ll, BFu7i_BFu9ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu9ll_BFu33) C1{ Fi:7 FL:9 FL:33}



static void Test_BFu7i_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu33, BFu7i_BFu9ll_BFu33)
//============================================================================


struct  BFu7i_BFu9ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu9ll_BFu7c) C1{ Fi:7 FL:9 Fc:7}



static void Test_BFu7i_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu7c, BFu7i_BFu9ll_BFu7c)
//============================================================================


struct  BFu7i_BFu9ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu9ll_BFu7i) C1{ Fi:7 FL:9 Fi:7}



static void Test_BFu7i_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu7i, BFu7i_BFu9ll_BFu7i)
//============================================================================


struct  BFu7i_BFu9ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu9ll_BFu7ll) C1{ Fi:7 FL:9 FL:7}



static void Test_BFu7i_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu7ll, BFu7i_BFu9ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu9ll_BFu7s) C1{ Fi:7 FL:9 Fs:7}



static void Test_BFu7i_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu7s, BFu7i_BFu9ll_BFu7s)
//============================================================================


struct  BFu7i_BFu9ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu9ll_BFu8c) C1{ Fi:7 FL:9 Fc:8}



static void Test_BFu7i_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu8c, BFu7i_BFu9ll_BFu8c)
//============================================================================


struct  BFu7i_BFu9ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu9ll_BFu8i) C1{ Fi:7 FL:9 Fi:8}



static void Test_BFu7i_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu8i, BFu7i_BFu9ll_BFu8i)
//============================================================================


struct  BFu7i_BFu9ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu9ll_BFu8ll) C1{ Fi:7 FL:9 FL:8}



static void Test_BFu7i_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu8ll, BFu7i_BFu9ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu9ll_BFu8s) C1{ Fi:7 FL:9 Fs:8}



static void Test_BFu7i_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu8s, BFu7i_BFu9ll_BFu8s)
//============================================================================


struct  BFu7i_BFu9ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu9ll_BFu9i) C1{ Fi:7 FL:9 Fi:9}



static void Test_BFu7i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu9i, BFu7i_BFu9ll_BFu9i)
//============================================================================


struct  BFu7i_BFu9ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu9ll_BFu9ll) C1{ Fi:7 FL:9 FL:9}



static void Test_BFu7i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu9ll, BFu7i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu9ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu9ll_BFu9s) C1{ Fi:7 FL:9 Fs:9}



static void Test_BFu7i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_BFu9s, BFu7i_BFu9ll_BFu9s)
//============================================================================


struct  BFu7i_BFu9ll_C  {
  unsigned int v1:7;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu7i_BFu9ll_C) C1{ Fi:7 FL:9 Fc}



static void Test_BFu7i_BFu9ll_C()
{
  {
    init_simple_test("BFu7i_BFu9ll_C");
    static STRUCT_IF_C BFu7i_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_C, BFu7i_BFu9ll_C)
//============================================================================


struct  BFu7i_BFu9ll_D  {
  unsigned int v1:7;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu7i_BFu9ll_D) C1{ Fi:7 FL:9 FL}



static void Test_BFu7i_BFu9ll_D()
{
  {
    init_simple_test("BFu7i_BFu9ll_D");
    static STRUCT_IF_C BFu7i_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_D, BFu7i_BFu9ll_D)
//============================================================================


struct  BFu7i_BFu9ll_F  {
  unsigned int v1:7;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu7i_BFu9ll_F) C1{ Fi:7 FL:9 Fi}



static void Test_BFu7i_BFu9ll_F()
{
  {
    init_simple_test("BFu7i_BFu9ll_F");
    static STRUCT_IF_C BFu7i_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_F, BFu7i_BFu9ll_F)
//============================================================================


struct  BFu7i_BFu9ll_I  {
  unsigned int v1:7;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu7i_BFu9ll_I) C1{ Fi:7 FL:9 Fi}



static void Test_BFu7i_BFu9ll_I()
{
  {
    init_simple_test("BFu7i_BFu9ll_I");
    static STRUCT_IF_C BFu7i_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_I, BFu7i_BFu9ll_I)
//============================================================================


struct  BFu7i_BFu9ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu7i_BFu9ll_Ip) C1{ Fi:7 FL:9 Fp}



static void Test_BFu7i_BFu9ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu9ll_Ip");
    static STRUCT_IF_C BFu7i_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Ip, BFu7i_BFu9ll_Ip)
//============================================================================


struct  BFu7i_BFu9ll_L  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu9ll_L) C1{ Fi:7 FL:9 FL}



static void Test_BFu7i_BFu9ll_L()
{
  {
    init_simple_test("BFu7i_BFu9ll_L");
    static STRUCT_IF_C BFu7i_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_L, BFu7i_BFu9ll_L)
//============================================================================


struct  BFu7i_BFu9ll_S  {
  unsigned int v1:7;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu7i_BFu9ll_S) C1{ Fi:7 FL:9 Fs}



static void Test_BFu7i_BFu9ll_S()
{
  {
    init_simple_test("BFu7i_BFu9ll_S");
    static STRUCT_IF_C BFu7i_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_S, BFu7i_BFu9ll_S)
//============================================================================


struct  BFu7i_BFu9ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu9ll_Uc) C1{ Fi:7 FL:9 Fc}



static void Test_BFu7i_BFu9ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu9ll_Uc");
    static STRUCT_IF_C BFu7i_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Uc, BFu7i_BFu9ll_Uc)
//============================================================================


struct  BFu7i_BFu9ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu9ll_Ui) C1{ Fi:7 FL:9 Fi}



static void Test_BFu7i_BFu9ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu9ll_Ui");
    static STRUCT_IF_C BFu7i_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Ui, BFu7i_BFu9ll_Ui)
//============================================================================


struct  BFu7i_BFu9ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu9ll_Ul) C1{ Fi:7 FL:9 FL}



static void Test_BFu7i_BFu9ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu9ll_Ul");
    static STRUCT_IF_C BFu7i_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Ul, BFu7i_BFu9ll_Ul)
//============================================================================


struct  BFu7i_BFu9ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu9ll_Us) C1{ Fi:7 FL:9 Fs}



static void Test_BFu7i_BFu9ll_Us()
{
  {
    init_simple_test("BFu7i_BFu9ll_Us");
    static STRUCT_IF_C BFu7i_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Us, BFu7i_BFu9ll_Us)
//============================================================================


struct  BFu7i_BFu9ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu7i_BFu9ll_Vp) C1{ Fi:7 FL:9 Fp}



static void Test_BFu7i_BFu9ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu9ll_Vp");
    static STRUCT_IF_C BFu7i_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9ll_Vp, BFu7i_BFu9ll_Vp)
//============================================================================


struct  BFu7i_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu7i_BFu9s) C1{ Fi:7 Fs:9}



static void Test_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s, BFu7i_BFu9s)
//============================================================================


struct  BFu7i_BFu9s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu9s_BFu15i) C1{ Fi:7 Fs:9 Fi:15}



static void Test_BFu7i_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu15i, BFu7i_BFu9s_BFu15i)
//============================================================================


struct  BFu7i_BFu9s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu9s_BFu15ll) C1{ Fi:7 Fs:9 FL:15}



static void Test_BFu7i_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu15ll, BFu7i_BFu9s_BFu15ll)
//============================================================================


struct  BFu7i_BFu9s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu9s_BFu15s) C1{ Fi:7 Fs:9 Fs:15}



static void Test_BFu7i_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu15s, BFu7i_BFu9s_BFu15s)
//============================================================================


struct  BFu7i_BFu9s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu9s_BFu16i) C1{ Fi:7 Fs:9 Fi:16}



static void Test_BFu7i_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu16i, BFu7i_BFu9s_BFu16i)
//============================================================================


struct  BFu7i_BFu9s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu9s_BFu16ll) C1{ Fi:7 Fs:9 FL:16}



static void Test_BFu7i_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu16ll, BFu7i_BFu9s_BFu16ll)
//============================================================================


struct  BFu7i_BFu9s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu9s_BFu16s) C1{ Fi:7 Fs:9 Fs:16}



static void Test_BFu7i_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu16s, BFu7i_BFu9s_BFu16s)
//============================================================================


struct  BFu7i_BFu9s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu9s_BFu17i) C1{ Fi:7 Fs:9 Fi:17}



static void Test_BFu7i_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu17i, BFu7i_BFu9s_BFu17i)
//============================================================================


struct  BFu7i_BFu9s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu9s_BFu17ll) C1{ Fi:7 Fs:9 FL:17}



static void Test_BFu7i_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu17ll, BFu7i_BFu9s_BFu17ll)
//============================================================================


struct  BFu7i_BFu9s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu9s_BFu1c) C1{ Fi:7 Fs:9 Fc:1}



static void Test_BFu7i_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu1c, BFu7i_BFu9s_BFu1c)
//============================================================================


struct  BFu7i_BFu9s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu9s_BFu1i) C1{ Fi:7 Fs:9 Fi:1}



static void Test_BFu7i_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu1i, BFu7i_BFu9s_BFu1i)
//============================================================================


struct  BFu7i_BFu9s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu9s_BFu1ll) C1{ Fi:7 Fs:9 FL:1}



static void Test_BFu7i_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu1ll, BFu7i_BFu9s_BFu1ll)
//============================================================================


struct  BFu7i_BFu9s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu9s_BFu1s) C1{ Fi:7 Fs:9 Fs:1}



static void Test_BFu7i_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu1s, BFu7i_BFu9s_BFu1s)
//============================================================================


struct  BFu7i_BFu9s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu9s_BFu31i) C1{ Fi:7 Fs:9 Fi:31}



static void Test_BFu7i_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu31i, BFu7i_BFu9s_BFu31i)
//============================================================================


struct  BFu7i_BFu9s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu9s_BFu31ll) C1{ Fi:7 Fs:9 FL:31}



static void Test_BFu7i_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu31ll, BFu7i_BFu9s_BFu31ll)
//============================================================================


struct  BFu7i_BFu9s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu9s_BFu32i) C1{ Fi:7 Fs:9 Fi:32}



static void Test_BFu7i_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu32i, BFu7i_BFu9s_BFu32i)
//============================================================================


struct  BFu7i_BFu9s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu9s_BFu32ll) C1{ Fi:7 Fs:9 FL:32}



static void Test_BFu7i_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu32ll, BFu7i_BFu9s_BFu32ll)
//============================================================================


struct  BFu7i_BFu9s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu9s_BFu33) C1{ Fi:7 Fs:9 FL:33}



static void Test_BFu7i_BFu9s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu33");
    static STRUCT_IF_C BFu7i_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu33, BFu7i_BFu9s_BFu33)
//============================================================================


struct  BFu7i_BFu9s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu9s_BFu7c) C1{ Fi:7 Fs:9 Fc:7}



static void Test_BFu7i_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu7c, BFu7i_BFu9s_BFu7c)
//============================================================================


struct  BFu7i_BFu9s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu9s_BFu7i) C1{ Fi:7 Fs:9 Fi:7}



static void Test_BFu7i_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu7i, BFu7i_BFu9s_BFu7i)
//============================================================================


struct  BFu7i_BFu9s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu9s_BFu7ll) C1{ Fi:7 Fs:9 FL:7}



static void Test_BFu7i_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu7ll, BFu7i_BFu9s_BFu7ll)
//============================================================================


struct  BFu7i_BFu9s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu9s_BFu7s) C1{ Fi:7 Fs:9 Fs:7}



static void Test_BFu7i_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu7s, BFu7i_BFu9s_BFu7s)
//============================================================================


struct  BFu7i_BFu9s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu9s_BFu8c) C1{ Fi:7 Fs:9 Fc:8}



static void Test_BFu7i_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu8c, BFu7i_BFu9s_BFu8c)
//============================================================================


struct  BFu7i_BFu9s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu9s_BFu8i) C1{ Fi:7 Fs:9 Fi:8}



static void Test_BFu7i_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu8i, BFu7i_BFu9s_BFu8i)
//============================================================================


struct  BFu7i_BFu9s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu9s_BFu8ll) C1{ Fi:7 Fs:9 FL:8}



static void Test_BFu7i_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu8ll, BFu7i_BFu9s_BFu8ll)
//============================================================================


struct  BFu7i_BFu9s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu9s_BFu8s) C1{ Fi:7 Fs:9 Fs:8}



static void Test_BFu7i_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu8s, BFu7i_BFu9s_BFu8s)
//============================================================================


struct  BFu7i_BFu9s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu9s_BFu9i) C1{ Fi:7 Fs:9 Fi:9}



static void Test_BFu7i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu9i, BFu7i_BFu9s_BFu9i)
//============================================================================


struct  BFu7i_BFu9s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu9s_BFu9ll) C1{ Fi:7 Fs:9 FL:9}



static void Test_BFu7i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu9ll, BFu7i_BFu9s_BFu9ll)
//============================================================================


struct  BFu7i_BFu9s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu9s_BFu9s) C1{ Fi:7 Fs:9 Fs:9}



static void Test_BFu7i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_BFu9s, BFu7i_BFu9s_BFu9s)
//============================================================================


struct  BFu7i_BFu9s_C  {
  unsigned int v1:7;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu7i_BFu9s_C) C1{ Fi:7 Fs:9 Fc}



static void Test_BFu7i_BFu9s_C()
{
  {
    init_simple_test("BFu7i_BFu9s_C");
    static STRUCT_IF_C BFu7i_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_C");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_C, BFu7i_BFu9s_C)
//============================================================================


struct  BFu7i_BFu9s_D  {
  unsigned int v1:7;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu7i_BFu9s_D) C1{ Fi:7 Fs:9 FL}



static void Test_BFu7i_BFu9s_D()
{
  {
    init_simple_test("BFu7i_BFu9s_D");
    static STRUCT_IF_C BFu7i_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_D, BFu7i_BFu9s_D)
//============================================================================


struct  BFu7i_BFu9s_F  {
  unsigned int v1:7;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu7i_BFu9s_F) C1{ Fi:7 Fs:9 Fi}



static void Test_BFu7i_BFu9s_F()
{
  {
    init_simple_test("BFu7i_BFu9s_F");
    static STRUCT_IF_C BFu7i_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_F, BFu7i_BFu9s_F)
//============================================================================


struct  BFu7i_BFu9s_I  {
  unsigned int v1:7;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu7i_BFu9s_I) C1{ Fi:7 Fs:9 Fi}



static void Test_BFu7i_BFu9s_I()
{
  {
    init_simple_test("BFu7i_BFu9s_I");
    static STRUCT_IF_C BFu7i_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_I, BFu7i_BFu9s_I)
//============================================================================


struct  BFu7i_BFu9s_Ip  {
  unsigned int v1:7;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu7i_BFu9s_Ip) C1{ Fi:7 Fs:9 Fp}



static void Test_BFu7i_BFu9s_Ip()
{
  {
    init_simple_test("BFu7i_BFu9s_Ip");
    static STRUCT_IF_C BFu7i_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Ip, BFu7i_BFu9s_Ip)
//============================================================================


struct  BFu7i_BFu9s_L  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu9s_L) C1{ Fi:7 Fs:9 FL}



static void Test_BFu7i_BFu9s_L()
{
  {
    init_simple_test("BFu7i_BFu9s_L");
    static STRUCT_IF_C BFu7i_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_L, BFu7i_BFu9s_L)
//============================================================================


struct  BFu7i_BFu9s_S  {
  unsigned int v1:7;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu7i_BFu9s_S) C1{ Fi:7 Fs:9 Fs}



static void Test_BFu7i_BFu9s_S()
{
  {
    init_simple_test("BFu7i_BFu9s_S");
    static STRUCT_IF_C BFu7i_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_S, BFu7i_BFu9s_S)
//============================================================================


struct  BFu7i_BFu9s_Uc  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu9s_Uc) C1{ Fi:7 Fs:9 Fc}



static void Test_BFu7i_BFu9s_Uc()
{
  {
    init_simple_test("BFu7i_BFu9s_Uc");
    static STRUCT_IF_C BFu7i_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Uc");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Uc, BFu7i_BFu9s_Uc)
//============================================================================


struct  BFu7i_BFu9s_Ui  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu9s_Ui) C1{ Fi:7 Fs:9 Fi}



static void Test_BFu7i_BFu9s_Ui()
{
  {
    init_simple_test("BFu7i_BFu9s_Ui");
    static STRUCT_IF_C BFu7i_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Ui, BFu7i_BFu9s_Ui)
//============================================================================


struct  BFu7i_BFu9s_Ul  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu9s_Ul) C1{ Fi:7 Fs:9 FL}



static void Test_BFu7i_BFu9s_Ul()
{
  {
    init_simple_test("BFu7i_BFu9s_Ul");
    static STRUCT_IF_C BFu7i_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Ul, BFu7i_BFu9s_Ul)
//============================================================================


struct  BFu7i_BFu9s_Us  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu9s_Us) C1{ Fi:7 Fs:9 Fs}



static void Test_BFu7i_BFu9s_Us()
{
  {
    init_simple_test("BFu7i_BFu9s_Us");
    static STRUCT_IF_C BFu7i_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Us, BFu7i_BFu9s_Us)
//============================================================================


struct  BFu7i_BFu9s_Vp  {
  unsigned int v1:7;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu7i_BFu9s_Vp) C1{ Fi:7 Fs:9 Fp}



static void Test_BFu7i_BFu9s_Vp()
{
  {
    init_simple_test("BFu7i_BFu9s_Vp");
    static STRUCT_IF_C BFu7i_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu9s_Vp, BFu7i_BFu9s_Vp)
//============================================================================


struct  BFu7i_C  {
  unsigned int v1:7;
  char v2;
};
//SIG(1 BFu7i_C) C1{ Fi:7 Fc}



static void Test_BFu7i_C()
{
  {
    init_simple_test("BFu7i_C");
    static STRUCT_IF_C BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C");
    check_field_offset(lv, v2, 1, "BFu7i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C, BFu7i_C)
//============================================================================


struct  BFu7i_C_BFu15i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_C_BFu15i) C1{ Fi:7 Fc Fi:15}



static void Test_BFu7i_C_BFu15i()
{
  {
    init_simple_test("BFu7i_C_BFu15i");
    static STRUCT_IF_C BFu7i_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu15i, BFu7i_C_BFu15i)
//============================================================================


struct  BFu7i_C_BFu15ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_C_BFu15ll) C1{ Fi:7 Fc FL:15}



static void Test_BFu7i_C_BFu15ll()
{
  {
    init_simple_test("BFu7i_C_BFu15ll");
    static STRUCT_IF_C BFu7i_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu15ll, BFu7i_C_BFu15ll)
//============================================================================


struct  BFu7i_C_BFu15s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_C_BFu15s) C1{ Fi:7 Fc Fs:15}



static void Test_BFu7i_C_BFu15s()
{
  {
    init_simple_test("BFu7i_C_BFu15s");
    static STRUCT_IF_C BFu7i_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu15s, BFu7i_C_BFu15s)
//============================================================================


struct  BFu7i_C_BFu16i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_C_BFu16i) C1{ Fi:7 Fc Fi:16}



static void Test_BFu7i_C_BFu16i()
{
  {
    init_simple_test("BFu7i_C_BFu16i");
    static STRUCT_IF_C BFu7i_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu16i, BFu7i_C_BFu16i)
//============================================================================


struct  BFu7i_C_BFu16ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_C_BFu16ll) C1{ Fi:7 Fc FL:16}



static void Test_BFu7i_C_BFu16ll()
{
  {
    init_simple_test("BFu7i_C_BFu16ll");
    static STRUCT_IF_C BFu7i_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu16ll, BFu7i_C_BFu16ll)
//============================================================================


struct  BFu7i_C_BFu16s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_C_BFu16s) C1{ Fi:7 Fc Fs:16}



static void Test_BFu7i_C_BFu16s()
{
  {
    init_simple_test("BFu7i_C_BFu16s");
    static STRUCT_IF_C BFu7i_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu16s, BFu7i_C_BFu16s)
//============================================================================


struct  BFu7i_C_BFu17i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_C_BFu17i) C1{ Fi:7 Fc Fi:17}



static void Test_BFu7i_C_BFu17i()
{
  {
    init_simple_test("BFu7i_C_BFu17i");
    static STRUCT_IF_C BFu7i_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu17i, BFu7i_C_BFu17i)
//============================================================================


struct  BFu7i_C_BFu17ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_C_BFu17ll) C1{ Fi:7 Fc FL:17}



static void Test_BFu7i_C_BFu17ll()
{
  {
    init_simple_test("BFu7i_C_BFu17ll");
    static STRUCT_IF_C BFu7i_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu17ll, BFu7i_C_BFu17ll)
//============================================================================


struct  BFu7i_C_BFu1c  {
  unsigned int v1:7;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_C_BFu1c) C1{ Fi:7 Fc Fc:1}



static void Test_BFu7i_C_BFu1c()
{
  {
    init_simple_test("BFu7i_C_BFu1c");
    static STRUCT_IF_C BFu7i_C_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu1c, BFu7i_C_BFu1c)
//============================================================================


struct  BFu7i_C_BFu1i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_C_BFu1i) C1{ Fi:7 Fc Fi:1}



static void Test_BFu7i_C_BFu1i()
{
  {
    init_simple_test("BFu7i_C_BFu1i");
    static STRUCT_IF_C BFu7i_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu1i, BFu7i_C_BFu1i)
//============================================================================


struct  BFu7i_C_BFu1ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_C_BFu1ll) C1{ Fi:7 Fc FL:1}



static void Test_BFu7i_C_BFu1ll()
{
  {
    init_simple_test("BFu7i_C_BFu1ll");
    static STRUCT_IF_C BFu7i_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu1ll, BFu7i_C_BFu1ll)
//============================================================================


struct  BFu7i_C_BFu1s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_C_BFu1s) C1{ Fi:7 Fc Fs:1}



static void Test_BFu7i_C_BFu1s()
{
  {
    init_simple_test("BFu7i_C_BFu1s");
    static STRUCT_IF_C BFu7i_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu1s, BFu7i_C_BFu1s)
//============================================================================


struct  BFu7i_C_BFu31i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_C_BFu31i) C1{ Fi:7 Fc Fi:31}



static void Test_BFu7i_C_BFu31i()
{
  {
    init_simple_test("BFu7i_C_BFu31i");
    static STRUCT_IF_C BFu7i_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu31i, BFu7i_C_BFu31i)
//============================================================================


struct  BFu7i_C_BFu31ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_C_BFu31ll) C1{ Fi:7 Fc FL:31}



static void Test_BFu7i_C_BFu31ll()
{
  {
    init_simple_test("BFu7i_C_BFu31ll");
    static STRUCT_IF_C BFu7i_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu31ll, BFu7i_C_BFu31ll)
//============================================================================


struct  BFu7i_C_BFu32i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_C_BFu32i) C1{ Fi:7 Fc Fi:32}



static void Test_BFu7i_C_BFu32i()
{
  {
    init_simple_test("BFu7i_C_BFu32i");
    static STRUCT_IF_C BFu7i_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu32i, BFu7i_C_BFu32i)
//============================================================================


struct  BFu7i_C_BFu32ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_C_BFu32ll) C1{ Fi:7 Fc FL:32}



static void Test_BFu7i_C_BFu32ll()
{
  {
    init_simple_test("BFu7i_C_BFu32ll");
    static STRUCT_IF_C BFu7i_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu32ll, BFu7i_C_BFu32ll)
//============================================================================


struct  BFu7i_C_BFu33  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_C_BFu33) C1{ Fi:7 Fc FL:33}



static void Test_BFu7i_C_BFu33()
{
  {
    init_simple_test("BFu7i_C_BFu33");
    static STRUCT_IF_C BFu7i_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu33");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu33, BFu7i_C_BFu33)
//============================================================================


struct  BFu7i_C_BFu7c  {
  unsigned int v1:7;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_C_BFu7c) C1{ Fi:7 Fc Fc:7}



static void Test_BFu7i_C_BFu7c()
{
  {
    init_simple_test("BFu7i_C_BFu7c");
    static STRUCT_IF_C BFu7i_C_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu7c, BFu7i_C_BFu7c)
//============================================================================


struct  BFu7i_C_BFu7i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_C_BFu7i) C1{ Fi:7 Fc Fi:7}



static void Test_BFu7i_C_BFu7i()
{
  {
    init_simple_test("BFu7i_C_BFu7i");
    static STRUCT_IF_C BFu7i_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu7i, BFu7i_C_BFu7i)
//============================================================================


struct  BFu7i_C_BFu7ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_C_BFu7ll) C1{ Fi:7 Fc FL:7}



static void Test_BFu7i_C_BFu7ll()
{
  {
    init_simple_test("BFu7i_C_BFu7ll");
    static STRUCT_IF_C BFu7i_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu7ll, BFu7i_C_BFu7ll)
//============================================================================


struct  BFu7i_C_BFu7s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_C_BFu7s) C1{ Fi:7 Fc Fs:7}



static void Test_BFu7i_C_BFu7s()
{
  {
    init_simple_test("BFu7i_C_BFu7s");
    static STRUCT_IF_C BFu7i_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu7s, BFu7i_C_BFu7s)
//============================================================================


struct  BFu7i_C_BFu8c  {
  unsigned int v1:7;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_C_BFu8c) C1{ Fi:7 Fc Fc:8}



static void Test_BFu7i_C_BFu8c()
{
  {
    init_simple_test("BFu7i_C_BFu8c");
    static STRUCT_IF_C BFu7i_C_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu8c, BFu7i_C_BFu8c)
//============================================================================


struct  BFu7i_C_BFu8i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_C_BFu8i) C1{ Fi:7 Fc Fi:8}



static void Test_BFu7i_C_BFu8i()
{
  {
    init_simple_test("BFu7i_C_BFu8i");
    static STRUCT_IF_C BFu7i_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu8i, BFu7i_C_BFu8i)
//============================================================================


struct  BFu7i_C_BFu8ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_C_BFu8ll) C1{ Fi:7 Fc FL:8}



static void Test_BFu7i_C_BFu8ll()
{
  {
    init_simple_test("BFu7i_C_BFu8ll");
    static STRUCT_IF_C BFu7i_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu8ll, BFu7i_C_BFu8ll)
//============================================================================


struct  BFu7i_C_BFu8s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_C_BFu8s) C1{ Fi:7 Fc Fs:8}



static void Test_BFu7i_C_BFu8s()
{
  {
    init_simple_test("BFu7i_C_BFu8s");
    static STRUCT_IF_C BFu7i_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu8s, BFu7i_C_BFu8s)
//============================================================================


struct  BFu7i_C_BFu9i  {
  unsigned int v1:7;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_C_BFu9i) C1{ Fi:7 Fc Fi:9}



static void Test_BFu7i_C_BFu9i()
{
  {
    init_simple_test("BFu7i_C_BFu9i");
    static STRUCT_IF_C BFu7i_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu9i, BFu7i_C_BFu9i)
//============================================================================


struct  BFu7i_C_BFu9ll  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_C_BFu9ll) C1{ Fi:7 Fc FL:9}



static void Test_BFu7i_C_BFu9ll()
{
  {
    init_simple_test("BFu7i_C_BFu9ll");
    static STRUCT_IF_C BFu7i_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu9ll, BFu7i_C_BFu9ll)
//============================================================================


struct  BFu7i_C_BFu9s  {
  unsigned int v1:7;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_C_BFu9s) C1{ Fi:7 Fc Fs:9}



static void Test_BFu7i_C_BFu9s()
{
  {
    init_simple_test("BFu7i_C_BFu9s");
    static STRUCT_IF_C BFu7i_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_BFu9s, BFu7i_C_BFu9s)
//============================================================================


struct  BFu7i_C_C  {
  unsigned int v1:7;
  char v2;
  char v3;
};
//SIG(1 BFu7i_C_C) C1{ Fi:7 Fc[2]}



static void Test_BFu7i_C_C()
{
  {
    init_simple_test("BFu7i_C_C");
    static STRUCT_IF_C BFu7i_C_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_C");
    check_field_offset(lv, v2, 1, "BFu7i_C_C.v2");
    check_field_offset(lv, v3, 2, "BFu7i_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_C, BFu7i_C_C)
//============================================================================


struct  BFu7i_C_D  {
  unsigned int v1:7;
  char v2;
  double v3;
};
//SIG(1 BFu7i_C_D) C1{ Fi:7 Fc FL}



static void Test_BFu7i_C_D()
{
  {
    init_simple_test("BFu7i_C_D");
    static STRUCT_IF_C BFu7i_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_D");
    check_field_offset(lv, v2, 1, "BFu7i_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_D, BFu7i_C_D)
//============================================================================


struct  BFu7i_C_F  {
  unsigned int v1:7;
  char v2;
  float v3;
};
//SIG(1 BFu7i_C_F) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_C_F()
{
  {
    init_simple_test("BFu7i_C_F");
    static STRUCT_IF_C BFu7i_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_F");
    check_field_offset(lv, v2, 1, "BFu7i_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu7i_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_F, BFu7i_C_F)
//============================================================================


struct  BFu7i_C_I  {
  unsigned int v1:7;
  char v2;
  int v3;
};
//SIG(1 BFu7i_C_I) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_C_I()
{
  {
    init_simple_test("BFu7i_C_I");
    static STRUCT_IF_C BFu7i_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_I");
    check_field_offset(lv, v2, 1, "BFu7i_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu7i_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_I, BFu7i_C_I)
//============================================================================


struct  BFu7i_C_Ip  {
  unsigned int v1:7;
  char v2;
  int *v3;
};
//SIG(1 BFu7i_C_Ip) C1{ Fi:7 Fc Fp}



static void Test_BFu7i_C_Ip()
{
  {
    init_simple_test("BFu7i_C_Ip");
    static STRUCT_IF_C BFu7i_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Ip");
    check_field_offset(lv, v2, 1, "BFu7i_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Ip, BFu7i_C_Ip)
//============================================================================


struct  BFu7i_C_L  {
  unsigned int v1:7;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_C_L) C1{ Fi:7 Fc FL}



static void Test_BFu7i_C_L()
{
  {
    init_simple_test("BFu7i_C_L");
    static STRUCT_IF_C BFu7i_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_L");
    check_field_offset(lv, v2, 1, "BFu7i_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_L, BFu7i_C_L)
//============================================================================


struct  BFu7i_C_S  {
  unsigned int v1:7;
  char v2;
  short v3;
};
//SIG(1 BFu7i_C_S) C1{ Fi:7 Fc Fs}



static void Test_BFu7i_C_S()
{
  {
    init_simple_test("BFu7i_C_S");
    static STRUCT_IF_C BFu7i_C_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_S");
    check_field_offset(lv, v2, 1, "BFu7i_C_S.v2");
    check_field_offset(lv, v3, 2, "BFu7i_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_S, BFu7i_C_S)
//============================================================================


struct  BFu7i_C_Uc  {
  unsigned int v1:7;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu7i_C_Uc) C1{ Fi:7 Fc[2]}



static void Test_BFu7i_C_Uc()
{
  {
    init_simple_test("BFu7i_C_Uc");
    static STRUCT_IF_C BFu7i_C_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Uc");
    check_field_offset(lv, v2, 1, "BFu7i_C_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7i_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Uc, BFu7i_C_Uc)
//============================================================================


struct  BFu7i_C_Ui  {
  unsigned int v1:7;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu7i_C_Ui) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_C_Ui()
{
  {
    init_simple_test("BFu7i_C_Ui");
    static STRUCT_IF_C BFu7i_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Ui");
    check_field_offset(lv, v2, 1, "BFu7i_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7i_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Ui, BFu7i_C_Ui)
//============================================================================


struct  BFu7i_C_Ul  {
  unsigned int v1:7;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_C_Ul) C1{ Fi:7 Fc FL}



static void Test_BFu7i_C_Ul()
{
  {
    init_simple_test("BFu7i_C_Ul");
    static STRUCT_IF_C BFu7i_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Ul");
    check_field_offset(lv, v2, 1, "BFu7i_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Ul, BFu7i_C_Ul)
//============================================================================


struct  BFu7i_C_Us  {
  unsigned int v1:7;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu7i_C_Us) C1{ Fi:7 Fc Fs}



static void Test_BFu7i_C_Us()
{
  {
    init_simple_test("BFu7i_C_Us");
    static STRUCT_IF_C BFu7i_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Us");
    check_field_offset(lv, v2, 1, "BFu7i_C_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7i_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Us, BFu7i_C_Us)
//============================================================================


struct  BFu7i_C_Vp  {
  unsigned int v1:7;
  char v2;
  void *v3;
};
//SIG(1 BFu7i_C_Vp) C1{ Fi:7 Fc Fp}



static void Test_BFu7i_C_Vp()
{
  {
    init_simple_test("BFu7i_C_Vp");
    static STRUCT_IF_C BFu7i_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_Vp");
    check_field_offset(lv, v2, 1, "BFu7i_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_C_Vp, BFu7i_C_Vp)
//============================================================================


struct  BFu7i_D  {
  unsigned int v1:7;
  double v2;
};
//SIG(1 BFu7i_D) C1{ Fi:7 FL}



static void Test_BFu7i_D()
{
  {
    init_simple_test("BFu7i_D");
    static STRUCT_IF_C BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D, BFu7i_D)
//============================================================================


struct  BFu7i_D_BFu15i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_D_BFu15i) C1{ Fi:7 FL Fi:15}



static void Test_BFu7i_D_BFu15i()
{
  {
    init_simple_test("BFu7i_D_BFu15i");
    static STRUCT_IF_C BFu7i_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu15i, BFu7i_D_BFu15i)
//============================================================================


struct  BFu7i_D_BFu15ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_D_BFu15ll) C1{ Fi:7 FL FL:15}



static void Test_BFu7i_D_BFu15ll()
{
  {
    init_simple_test("BFu7i_D_BFu15ll");
    static STRUCT_IF_C BFu7i_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu15ll, BFu7i_D_BFu15ll)
//============================================================================


struct  BFu7i_D_BFu15s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_D_BFu15s) C1{ Fi:7 FL Fs:15}



static void Test_BFu7i_D_BFu15s()
{
  {
    init_simple_test("BFu7i_D_BFu15s");
    static STRUCT_IF_C BFu7i_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu15s, BFu7i_D_BFu15s)
//============================================================================


struct  BFu7i_D_BFu16i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_D_BFu16i) C1{ Fi:7 FL Fi:16}



static void Test_BFu7i_D_BFu16i()
{
  {
    init_simple_test("BFu7i_D_BFu16i");
    static STRUCT_IF_C BFu7i_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu16i, BFu7i_D_BFu16i)
//============================================================================


struct  BFu7i_D_BFu16ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_D_BFu16ll) C1{ Fi:7 FL FL:16}



static void Test_BFu7i_D_BFu16ll()
{
  {
    init_simple_test("BFu7i_D_BFu16ll");
    static STRUCT_IF_C BFu7i_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu16ll, BFu7i_D_BFu16ll)
//============================================================================


struct  BFu7i_D_BFu16s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_D_BFu16s) C1{ Fi:7 FL Fs:16}



static void Test_BFu7i_D_BFu16s()
{
  {
    init_simple_test("BFu7i_D_BFu16s");
    static STRUCT_IF_C BFu7i_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu16s, BFu7i_D_BFu16s)
//============================================================================


struct  BFu7i_D_BFu17i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_D_BFu17i) C1{ Fi:7 FL Fi:17}



static void Test_BFu7i_D_BFu17i()
{
  {
    init_simple_test("BFu7i_D_BFu17i");
    static STRUCT_IF_C BFu7i_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu17i, BFu7i_D_BFu17i)
//============================================================================


struct  BFu7i_D_BFu17ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_D_BFu17ll) C1{ Fi:7 FL FL:17}



static void Test_BFu7i_D_BFu17ll()
{
  {
    init_simple_test("BFu7i_D_BFu17ll");
    static STRUCT_IF_C BFu7i_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu17ll, BFu7i_D_BFu17ll)
//============================================================================


struct  BFu7i_D_BFu1c  {
  unsigned int v1:7;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_D_BFu1c) C1{ Fi:7 FL Fc:1}



static void Test_BFu7i_D_BFu1c()
{
  {
    init_simple_test("BFu7i_D_BFu1c");
    static STRUCT_IF_C BFu7i_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu1c, BFu7i_D_BFu1c)
//============================================================================


struct  BFu7i_D_BFu1i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_D_BFu1i) C1{ Fi:7 FL Fi:1}



static void Test_BFu7i_D_BFu1i()
{
  {
    init_simple_test("BFu7i_D_BFu1i");
    static STRUCT_IF_C BFu7i_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu1i, BFu7i_D_BFu1i)
//============================================================================


struct  BFu7i_D_BFu1ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_D_BFu1ll) C1{ Fi:7 FL FL:1}



static void Test_BFu7i_D_BFu1ll()
{
  {
    init_simple_test("BFu7i_D_BFu1ll");
    static STRUCT_IF_C BFu7i_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu1ll, BFu7i_D_BFu1ll)
//============================================================================


struct  BFu7i_D_BFu1s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_D_BFu1s) C1{ Fi:7 FL Fs:1}



static void Test_BFu7i_D_BFu1s()
{
  {
    init_simple_test("BFu7i_D_BFu1s");
    static STRUCT_IF_C BFu7i_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu1s, BFu7i_D_BFu1s)
//============================================================================


struct  BFu7i_D_BFu31i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_D_BFu31i) C1{ Fi:7 FL Fi:31}



static void Test_BFu7i_D_BFu31i()
{
  {
    init_simple_test("BFu7i_D_BFu31i");
    static STRUCT_IF_C BFu7i_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu31i, BFu7i_D_BFu31i)
//============================================================================


struct  BFu7i_D_BFu31ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_D_BFu31ll) C1{ Fi:7 FL FL:31}



static void Test_BFu7i_D_BFu31ll()
{
  {
    init_simple_test("BFu7i_D_BFu31ll");
    static STRUCT_IF_C BFu7i_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu31ll, BFu7i_D_BFu31ll)
//============================================================================


struct  BFu7i_D_BFu32i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_D_BFu32i) C1{ Fi:7 FL Fi:32}



static void Test_BFu7i_D_BFu32i()
{
  {
    init_simple_test("BFu7i_D_BFu32i");
    static STRUCT_IF_C BFu7i_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu32i, BFu7i_D_BFu32i)
//============================================================================


struct  BFu7i_D_BFu32ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_D_BFu32ll) C1{ Fi:7 FL FL:32}



static void Test_BFu7i_D_BFu32ll()
{
  {
    init_simple_test("BFu7i_D_BFu32ll");
    static STRUCT_IF_C BFu7i_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu32ll, BFu7i_D_BFu32ll)
//============================================================================


struct  BFu7i_D_BFu33  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_D_BFu33) C1{ Fi:7 FL FL:33}



static void Test_BFu7i_D_BFu33()
{
  {
    init_simple_test("BFu7i_D_BFu33");
    static STRUCT_IF_C BFu7i_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7i_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7i_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu33, BFu7i_D_BFu33)
//============================================================================


struct  BFu7i_D_BFu7c  {
  unsigned int v1:7;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_D_BFu7c) C1{ Fi:7 FL Fc:7}



static void Test_BFu7i_D_BFu7c()
{
  {
    init_simple_test("BFu7i_D_BFu7c");
    static STRUCT_IF_C BFu7i_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu7c, BFu7i_D_BFu7c)
//============================================================================


struct  BFu7i_D_BFu7i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_D_BFu7i) C1{ Fi:7 FL Fi:7}



static void Test_BFu7i_D_BFu7i()
{
  {
    init_simple_test("BFu7i_D_BFu7i");
    static STRUCT_IF_C BFu7i_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu7i, BFu7i_D_BFu7i)
//============================================================================


struct  BFu7i_D_BFu7ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_D_BFu7ll) C1{ Fi:7 FL FL:7}



static void Test_BFu7i_D_BFu7ll()
{
  {
    init_simple_test("BFu7i_D_BFu7ll");
    static STRUCT_IF_C BFu7i_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu7ll, BFu7i_D_BFu7ll)
//============================================================================


struct  BFu7i_D_BFu7s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_D_BFu7s) C1{ Fi:7 FL Fs:7}



static void Test_BFu7i_D_BFu7s()
{
  {
    init_simple_test("BFu7i_D_BFu7s");
    static STRUCT_IF_C BFu7i_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu7s, BFu7i_D_BFu7s)
//============================================================================


struct  BFu7i_D_BFu8c  {
  unsigned int v1:7;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_D_BFu8c) C1{ Fi:7 FL Fc:8}



static void Test_BFu7i_D_BFu8c()
{
  {
    init_simple_test("BFu7i_D_BFu8c");
    static STRUCT_IF_C BFu7i_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu8c, BFu7i_D_BFu8c)
//============================================================================


struct  BFu7i_D_BFu8i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_D_BFu8i) C1{ Fi:7 FL Fi:8}



static void Test_BFu7i_D_BFu8i()
{
  {
    init_simple_test("BFu7i_D_BFu8i");
    static STRUCT_IF_C BFu7i_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu8i, BFu7i_D_BFu8i)
//============================================================================


struct  BFu7i_D_BFu8ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_D_BFu8ll) C1{ Fi:7 FL FL:8}



static void Test_BFu7i_D_BFu8ll()
{
  {
    init_simple_test("BFu7i_D_BFu8ll");
    static STRUCT_IF_C BFu7i_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu8ll, BFu7i_D_BFu8ll)
//============================================================================


struct  BFu7i_D_BFu8s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_D_BFu8s) C1{ Fi:7 FL Fs:8}



static void Test_BFu7i_D_BFu8s()
{
  {
    init_simple_test("BFu7i_D_BFu8s");
    static STRUCT_IF_C BFu7i_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu8s, BFu7i_D_BFu8s)
//============================================================================


struct  BFu7i_D_BFu9i  {
  unsigned int v1:7;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_D_BFu9i) C1{ Fi:7 FL Fi:9}



static void Test_BFu7i_D_BFu9i()
{
  {
    init_simple_test("BFu7i_D_BFu9i");
    static STRUCT_IF_C BFu7i_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu9i, BFu7i_D_BFu9i)
//============================================================================


struct  BFu7i_D_BFu9ll  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_D_BFu9ll) C1{ Fi:7 FL FL:9}



static void Test_BFu7i_D_BFu9ll()
{
  {
    init_simple_test("BFu7i_D_BFu9ll");
    static STRUCT_IF_C BFu7i_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu9ll, BFu7i_D_BFu9ll)
//============================================================================


struct  BFu7i_D_BFu9s  {
  unsigned int v1:7;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_D_BFu9s) C1{ Fi:7 FL Fs:9}



static void Test_BFu7i_D_BFu9s()
{
  {
    init_simple_test("BFu7i_D_BFu9s");
    static STRUCT_IF_C BFu7i_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_BFu9s, BFu7i_D_BFu9s)
//============================================================================


struct  BFu7i_D_C  {
  unsigned int v1:7;
  double v2;
  char v3;
};
//SIG(1 BFu7i_D_C) C1{ Fi:7 FL Fc}



static void Test_BFu7i_D_C()
{
  {
    init_simple_test("BFu7i_D_C");
    static STRUCT_IF_C BFu7i_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_C, BFu7i_D_C)
//============================================================================


struct  BFu7i_D_D  {
  unsigned int v1:7;
  double v2;
  double v3;
};
//SIG(1 BFu7i_D_D) C1{ Fi:7 FL[2]}



static void Test_BFu7i_D_D()
{
  {
    init_simple_test("BFu7i_D_D");
    static STRUCT_IF_C BFu7i_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_D, BFu7i_D_D)
//============================================================================


struct  BFu7i_D_F  {
  unsigned int v1:7;
  double v2;
  float v3;
};
//SIG(1 BFu7i_D_F) C1{ Fi:7 FL Fi}



static void Test_BFu7i_D_F()
{
  {
    init_simple_test("BFu7i_D_F");
    static STRUCT_IF_C BFu7i_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_F, BFu7i_D_F)
//============================================================================


struct  BFu7i_D_I  {
  unsigned int v1:7;
  double v2;
  int v3;
};
//SIG(1 BFu7i_D_I) C1{ Fi:7 FL Fi}



static void Test_BFu7i_D_I()
{
  {
    init_simple_test("BFu7i_D_I");
    static STRUCT_IF_C BFu7i_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_I, BFu7i_D_I)
//============================================================================


struct  BFu7i_D_Ip  {
  unsigned int v1:7;
  double v2;
  int *v3;
};
//SIG(1 BFu7i_D_Ip) C1{ Fi:7 FL Fp}



static void Test_BFu7i_D_Ip()
{
  {
    init_simple_test("BFu7i_D_Ip");
    static STRUCT_IF_C BFu7i_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Ip, BFu7i_D_Ip)
//============================================================================


struct  BFu7i_D_L  {
  unsigned int v1:7;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_D_L) C1{ Fi:7 FL[2]}



static void Test_BFu7i_D_L()
{
  {
    init_simple_test("BFu7i_D_L");
    static STRUCT_IF_C BFu7i_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_L, BFu7i_D_L)
//============================================================================


struct  BFu7i_D_S  {
  unsigned int v1:7;
  double v2;
  short v3;
};
//SIG(1 BFu7i_D_S) C1{ Fi:7 FL Fs}



static void Test_BFu7i_D_S()
{
  {
    init_simple_test("BFu7i_D_S");
    static STRUCT_IF_C BFu7i_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_S, BFu7i_D_S)
//============================================================================


struct  BFu7i_D_Uc  {
  unsigned int v1:7;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu7i_D_Uc) C1{ Fi:7 FL Fc}



static void Test_BFu7i_D_Uc()
{
  {
    init_simple_test("BFu7i_D_Uc");
    static STRUCT_IF_C BFu7i_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Uc, BFu7i_D_Uc)
//============================================================================


struct  BFu7i_D_Ui  {
  unsigned int v1:7;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu7i_D_Ui) C1{ Fi:7 FL Fi}



static void Test_BFu7i_D_Ui()
{
  {
    init_simple_test("BFu7i_D_Ui");
    static STRUCT_IF_C BFu7i_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Ui, BFu7i_D_Ui)
//============================================================================


struct  BFu7i_D_Ul  {
  unsigned int v1:7;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_D_Ul) C1{ Fi:7 FL[2]}



static void Test_BFu7i_D_Ul()
{
  {
    init_simple_test("BFu7i_D_Ul");
    static STRUCT_IF_C BFu7i_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Ul, BFu7i_D_Ul)
//============================================================================


struct  BFu7i_D_Us  {
  unsigned int v1:7;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu7i_D_Us) C1{ Fi:7 FL Fs}



static void Test_BFu7i_D_Us()
{
  {
    init_simple_test("BFu7i_D_Us");
    static STRUCT_IF_C BFu7i_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Us, BFu7i_D_Us)
//============================================================================


struct  BFu7i_D_Vp  {
  unsigned int v1:7;
  double v2;
  void *v3;
};
//SIG(1 BFu7i_D_Vp) C1{ Fi:7 FL Fp}



static void Test_BFu7i_D_Vp()
{
  {
    init_simple_test("BFu7i_D_Vp");
    static STRUCT_IF_C BFu7i_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_D_Vp, BFu7i_D_Vp)
//============================================================================


struct  BFu7i_F  {
  unsigned int v1:7;
  float v2;
};
//SIG(1 BFu7i_F) C1{ Fi:7 Fi}



static void Test_BFu7i_F()
{
  {
    init_simple_test("BFu7i_F");
    static STRUCT_IF_C BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F");
    check_field_offset(lv, v2, 4, "BFu7i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F, BFu7i_F)
//============================================================================


struct  BFu7i_F_BFu15i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_F_BFu15i) C1{ Fi:7 Fi Fi:15}



static void Test_BFu7i_F_BFu15i()
{
  {
    init_simple_test("BFu7i_F_BFu15i");
    static STRUCT_IF_C BFu7i_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu15i, BFu7i_F_BFu15i)
//============================================================================


struct  BFu7i_F_BFu15ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_F_BFu15ll) C1{ Fi:7 Fi FL:15}



static void Test_BFu7i_F_BFu15ll()
{
  {
    init_simple_test("BFu7i_F_BFu15ll");
    static STRUCT_IF_C BFu7i_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu15ll, BFu7i_F_BFu15ll)
//============================================================================


struct  BFu7i_F_BFu15s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_F_BFu15s) C1{ Fi:7 Fi Fs:15}



static void Test_BFu7i_F_BFu15s()
{
  {
    init_simple_test("BFu7i_F_BFu15s");
    static STRUCT_IF_C BFu7i_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu15s, BFu7i_F_BFu15s)
//============================================================================


struct  BFu7i_F_BFu16i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_F_BFu16i) C1{ Fi:7 Fi Fi:16}



static void Test_BFu7i_F_BFu16i()
{
  {
    init_simple_test("BFu7i_F_BFu16i");
    static STRUCT_IF_C BFu7i_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu16i, BFu7i_F_BFu16i)
//============================================================================


struct  BFu7i_F_BFu16ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_F_BFu16ll) C1{ Fi:7 Fi FL:16}



static void Test_BFu7i_F_BFu16ll()
{
  {
    init_simple_test("BFu7i_F_BFu16ll");
    static STRUCT_IF_C BFu7i_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu16ll, BFu7i_F_BFu16ll)
//============================================================================


struct  BFu7i_F_BFu16s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_F_BFu16s) C1{ Fi:7 Fi Fs:16}



static void Test_BFu7i_F_BFu16s()
{
  {
    init_simple_test("BFu7i_F_BFu16s");
    static STRUCT_IF_C BFu7i_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu16s, BFu7i_F_BFu16s)
//============================================================================


struct  BFu7i_F_BFu17i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_F_BFu17i) C1{ Fi:7 Fi Fi:17}



static void Test_BFu7i_F_BFu17i()
{
  {
    init_simple_test("BFu7i_F_BFu17i");
    static STRUCT_IF_C BFu7i_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu17i, BFu7i_F_BFu17i)
//============================================================================


struct  BFu7i_F_BFu17ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_F_BFu17ll) C1{ Fi:7 Fi FL:17}



static void Test_BFu7i_F_BFu17ll()
{
  {
    init_simple_test("BFu7i_F_BFu17ll");
    static STRUCT_IF_C BFu7i_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu17ll, BFu7i_F_BFu17ll)
//============================================================================


struct  BFu7i_F_BFu1c  {
  unsigned int v1:7;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_F_BFu1c) C1{ Fi:7 Fi Fc:1}



static void Test_BFu7i_F_BFu1c()
{
  {
    init_simple_test("BFu7i_F_BFu1c");
    static STRUCT_IF_C BFu7i_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu1c, BFu7i_F_BFu1c)
//============================================================================


struct  BFu7i_F_BFu1i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_F_BFu1i) C1{ Fi:7 Fi Fi:1}



static void Test_BFu7i_F_BFu1i()
{
  {
    init_simple_test("BFu7i_F_BFu1i");
    static STRUCT_IF_C BFu7i_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu1i, BFu7i_F_BFu1i)
//============================================================================


struct  BFu7i_F_BFu1ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_F_BFu1ll) C1{ Fi:7 Fi FL:1}



static void Test_BFu7i_F_BFu1ll()
{
  {
    init_simple_test("BFu7i_F_BFu1ll");
    static STRUCT_IF_C BFu7i_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu1ll, BFu7i_F_BFu1ll)
//============================================================================


struct  BFu7i_F_BFu1s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_F_BFu1s) C1{ Fi:7 Fi Fs:1}



static void Test_BFu7i_F_BFu1s()
{
  {
    init_simple_test("BFu7i_F_BFu1s");
    static STRUCT_IF_C BFu7i_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu1s, BFu7i_F_BFu1s)
//============================================================================


struct  BFu7i_F_BFu31i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_F_BFu31i) C1{ Fi:7 Fi Fi:31}



static void Test_BFu7i_F_BFu31i()
{
  {
    init_simple_test("BFu7i_F_BFu31i");
    static STRUCT_IF_C BFu7i_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu31i, BFu7i_F_BFu31i)
//============================================================================


struct  BFu7i_F_BFu31ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_F_BFu31ll) C1{ Fi:7 Fi FL:31}



static void Test_BFu7i_F_BFu31ll()
{
  {
    init_simple_test("BFu7i_F_BFu31ll");
    static STRUCT_IF_C BFu7i_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu31ll, BFu7i_F_BFu31ll)
//============================================================================


struct  BFu7i_F_BFu32i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_F_BFu32i) C1{ Fi:7 Fi Fi:32}



static void Test_BFu7i_F_BFu32i()
{
  {
    init_simple_test("BFu7i_F_BFu32i");
    static STRUCT_IF_C BFu7i_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu32i, BFu7i_F_BFu32i)
//============================================================================


struct  BFu7i_F_BFu32ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_F_BFu32ll) C1{ Fi:7 Fi FL:32}



static void Test_BFu7i_F_BFu32ll()
{
  {
    init_simple_test("BFu7i_F_BFu32ll");
    static STRUCT_IF_C BFu7i_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu32ll, BFu7i_F_BFu32ll)
//============================================================================


struct  BFu7i_F_BFu33  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_F_BFu33) C1{ Fi:7 Fi FL:33}



static void Test_BFu7i_F_BFu33()
{
  {
    init_simple_test("BFu7i_F_BFu33");
    static STRUCT_IF_C BFu7i_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7i_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7i_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu33, BFu7i_F_BFu33)
//============================================================================


struct  BFu7i_F_BFu7c  {
  unsigned int v1:7;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_F_BFu7c) C1{ Fi:7 Fi Fc:7}



static void Test_BFu7i_F_BFu7c()
{
  {
    init_simple_test("BFu7i_F_BFu7c");
    static STRUCT_IF_C BFu7i_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu7c, BFu7i_F_BFu7c)
//============================================================================


struct  BFu7i_F_BFu7i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_F_BFu7i) C1{ Fi:7 Fi Fi:7}



static void Test_BFu7i_F_BFu7i()
{
  {
    init_simple_test("BFu7i_F_BFu7i");
    static STRUCT_IF_C BFu7i_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu7i, BFu7i_F_BFu7i)
//============================================================================


struct  BFu7i_F_BFu7ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_F_BFu7ll) C1{ Fi:7 Fi FL:7}



static void Test_BFu7i_F_BFu7ll()
{
  {
    init_simple_test("BFu7i_F_BFu7ll");
    static STRUCT_IF_C BFu7i_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu7ll, BFu7i_F_BFu7ll)
//============================================================================


struct  BFu7i_F_BFu7s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_F_BFu7s) C1{ Fi:7 Fi Fs:7}



static void Test_BFu7i_F_BFu7s()
{
  {
    init_simple_test("BFu7i_F_BFu7s");
    static STRUCT_IF_C BFu7i_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu7s, BFu7i_F_BFu7s)
//============================================================================


struct  BFu7i_F_BFu8c  {
  unsigned int v1:7;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_F_BFu8c) C1{ Fi:7 Fi Fc:8}



static void Test_BFu7i_F_BFu8c()
{
  {
    init_simple_test("BFu7i_F_BFu8c");
    static STRUCT_IF_C BFu7i_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu8c, BFu7i_F_BFu8c)
//============================================================================


struct  BFu7i_F_BFu8i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_F_BFu8i) C1{ Fi:7 Fi Fi:8}



static void Test_BFu7i_F_BFu8i()
{
  {
    init_simple_test("BFu7i_F_BFu8i");
    static STRUCT_IF_C BFu7i_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu8i, BFu7i_F_BFu8i)
//============================================================================


struct  BFu7i_F_BFu8ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_F_BFu8ll) C1{ Fi:7 Fi FL:8}



static void Test_BFu7i_F_BFu8ll()
{
  {
    init_simple_test("BFu7i_F_BFu8ll");
    static STRUCT_IF_C BFu7i_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu8ll, BFu7i_F_BFu8ll)
//============================================================================


struct  BFu7i_F_BFu8s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_F_BFu8s) C1{ Fi:7 Fi Fs:8}



static void Test_BFu7i_F_BFu8s()
{
  {
    init_simple_test("BFu7i_F_BFu8s");
    static STRUCT_IF_C BFu7i_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu8s, BFu7i_F_BFu8s)
//============================================================================


struct  BFu7i_F_BFu9i  {
  unsigned int v1:7;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_F_BFu9i) C1{ Fi:7 Fi Fi:9}



static void Test_BFu7i_F_BFu9i()
{
  {
    init_simple_test("BFu7i_F_BFu9i");
    static STRUCT_IF_C BFu7i_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu9i, BFu7i_F_BFu9i)
//============================================================================


struct  BFu7i_F_BFu9ll  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_F_BFu9ll) C1{ Fi:7 Fi FL:9}



static void Test_BFu7i_F_BFu9ll()
{
  {
    init_simple_test("BFu7i_F_BFu9ll");
    static STRUCT_IF_C BFu7i_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu9ll, BFu7i_F_BFu9ll)
//============================================================================


struct  BFu7i_F_BFu9s  {
  unsigned int v1:7;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_F_BFu9s) C1{ Fi:7 Fi Fs:9}



static void Test_BFu7i_F_BFu9s()
{
  {
    init_simple_test("BFu7i_F_BFu9s");
    static STRUCT_IF_C BFu7i_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_BFu9s, BFu7i_F_BFu9s)
//============================================================================


struct  BFu7i_F_C  {
  unsigned int v1:7;
  float v2;
  char v3;
};
//SIG(1 BFu7i_F_C) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_F_C()
{
  {
    init_simple_test("BFu7i_F_C");
    static STRUCT_IF_C BFu7i_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_C");
    check_field_offset(lv, v2, 4, "BFu7i_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_C, BFu7i_F_C)
//============================================================================


struct  BFu7i_F_D  {
  unsigned int v1:7;
  float v2;
  double v3;
};
//SIG(1 BFu7i_F_D) C1{ Fi:7 Fi FL}



static void Test_BFu7i_F_D()
{
  {
    init_simple_test("BFu7i_F_D");
    static STRUCT_IF_C BFu7i_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_D");
    check_field_offset(lv, v2, 4, "BFu7i_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_D, BFu7i_F_D)
//============================================================================


struct  BFu7i_F_F  {
  unsigned int v1:7;
  float v2;
  float v3;
};
//SIG(1 BFu7i_F_F) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_F_F()
{
  {
    init_simple_test("BFu7i_F_F");
    static STRUCT_IF_C BFu7i_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_F");
    check_field_offset(lv, v2, 4, "BFu7i_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_F, BFu7i_F_F)
//============================================================================


struct  BFu7i_F_I  {
  unsigned int v1:7;
  float v2;
  int v3;
};
//SIG(1 BFu7i_F_I) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_F_I()
{
  {
    init_simple_test("BFu7i_F_I");
    static STRUCT_IF_C BFu7i_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_I");
    check_field_offset(lv, v2, 4, "BFu7i_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_I, BFu7i_F_I)
//============================================================================


struct  BFu7i_F_Ip  {
  unsigned int v1:7;
  float v2;
  int *v3;
};
//SIG(1 BFu7i_F_Ip) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_F_Ip()
{
  {
    init_simple_test("BFu7i_F_Ip");
    static STRUCT_IF_C BFu7i_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Ip");
    check_field_offset(lv, v2, 4, "BFu7i_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Ip, BFu7i_F_Ip)
//============================================================================


struct  BFu7i_F_L  {
  unsigned int v1:7;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_F_L) C1{ Fi:7 Fi FL}



static void Test_BFu7i_F_L()
{
  {
    init_simple_test("BFu7i_F_L");
    static STRUCT_IF_C BFu7i_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_L");
    check_field_offset(lv, v2, 4, "BFu7i_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_L, BFu7i_F_L)
//============================================================================


struct  BFu7i_F_S  {
  unsigned int v1:7;
  float v2;
  short v3;
};
//SIG(1 BFu7i_F_S) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_F_S()
{
  {
    init_simple_test("BFu7i_F_S");
    static STRUCT_IF_C BFu7i_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_S");
    check_field_offset(lv, v2, 4, "BFu7i_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_S, BFu7i_F_S)
//============================================================================


struct  BFu7i_F_Uc  {
  unsigned int v1:7;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu7i_F_Uc) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_F_Uc()
{
  {
    init_simple_test("BFu7i_F_Uc");
    static STRUCT_IF_C BFu7i_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Uc");
    check_field_offset(lv, v2, 4, "BFu7i_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Uc, BFu7i_F_Uc)
//============================================================================


struct  BFu7i_F_Ui  {
  unsigned int v1:7;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu7i_F_Ui) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_F_Ui()
{
  {
    init_simple_test("BFu7i_F_Ui");
    static STRUCT_IF_C BFu7i_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Ui, BFu7i_F_Ui)
//============================================================================


struct  BFu7i_F_Ul  {
  unsigned int v1:7;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_F_Ul) C1{ Fi:7 Fi FL}



static void Test_BFu7i_F_Ul()
{
  {
    init_simple_test("BFu7i_F_Ul");
    static STRUCT_IF_C BFu7i_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Ul");
    check_field_offset(lv, v2, 4, "BFu7i_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Ul, BFu7i_F_Ul)
//============================================================================


struct  BFu7i_F_Us  {
  unsigned int v1:7;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu7i_F_Us) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_F_Us()
{
  {
    init_simple_test("BFu7i_F_Us");
    static STRUCT_IF_C BFu7i_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Us");
    check_field_offset(lv, v2, 4, "BFu7i_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Us, BFu7i_F_Us)
//============================================================================


struct  BFu7i_F_Vp  {
  unsigned int v1:7;
  float v2;
  void *v3;
};
//SIG(1 BFu7i_F_Vp) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_F_Vp()
{
  {
    init_simple_test("BFu7i_F_Vp");
    static STRUCT_IF_C BFu7i_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_Vp");
    check_field_offset(lv, v2, 4, "BFu7i_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7i_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_F_Vp, BFu7i_F_Vp)
//============================================================================


struct  BFu7i_I  {
  unsigned int v1:7;
  int v2;
};
//SIG(1 BFu7i_I) C1{ Fi:7 Fi}



static void Test_BFu7i_I()
{
  {
    init_simple_test("BFu7i_I");
    static STRUCT_IF_C BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I");
    check_field_offset(lv, v2, 4, "BFu7i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I, BFu7i_I)
//============================================================================


struct  BFu7i_I_BFu15i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_I_BFu15i) C1{ Fi:7 Fi Fi:15}



static void Test_BFu7i_I_BFu15i()
{
  {
    init_simple_test("BFu7i_I_BFu15i");
    static STRUCT_IF_C BFu7i_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu15i, BFu7i_I_BFu15i)
//============================================================================


struct  BFu7i_I_BFu15ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_I_BFu15ll) C1{ Fi:7 Fi FL:15}



static void Test_BFu7i_I_BFu15ll()
{
  {
    init_simple_test("BFu7i_I_BFu15ll");
    static STRUCT_IF_C BFu7i_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu15ll, BFu7i_I_BFu15ll)
//============================================================================


struct  BFu7i_I_BFu15s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_I_BFu15s) C1{ Fi:7 Fi Fs:15}



static void Test_BFu7i_I_BFu15s()
{
  {
    init_simple_test("BFu7i_I_BFu15s");
    static STRUCT_IF_C BFu7i_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu15s, BFu7i_I_BFu15s)
//============================================================================


struct  BFu7i_I_BFu16i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_I_BFu16i) C1{ Fi:7 Fi Fi:16}



static void Test_BFu7i_I_BFu16i()
{
  {
    init_simple_test("BFu7i_I_BFu16i");
    static STRUCT_IF_C BFu7i_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu16i, BFu7i_I_BFu16i)
//============================================================================


struct  BFu7i_I_BFu16ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_I_BFu16ll) C1{ Fi:7 Fi FL:16}



static void Test_BFu7i_I_BFu16ll()
{
  {
    init_simple_test("BFu7i_I_BFu16ll");
    static STRUCT_IF_C BFu7i_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu16ll, BFu7i_I_BFu16ll)
//============================================================================


struct  BFu7i_I_BFu16s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_I_BFu16s) C1{ Fi:7 Fi Fs:16}



static void Test_BFu7i_I_BFu16s()
{
  {
    init_simple_test("BFu7i_I_BFu16s");
    static STRUCT_IF_C BFu7i_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu16s, BFu7i_I_BFu16s)
//============================================================================


struct  BFu7i_I_BFu17i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_I_BFu17i) C1{ Fi:7 Fi Fi:17}



static void Test_BFu7i_I_BFu17i()
{
  {
    init_simple_test("BFu7i_I_BFu17i");
    static STRUCT_IF_C BFu7i_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu17i, BFu7i_I_BFu17i)
//============================================================================


struct  BFu7i_I_BFu17ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_I_BFu17ll) C1{ Fi:7 Fi FL:17}



static void Test_BFu7i_I_BFu17ll()
{
  {
    init_simple_test("BFu7i_I_BFu17ll");
    static STRUCT_IF_C BFu7i_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu17ll, BFu7i_I_BFu17ll)
//============================================================================


struct  BFu7i_I_BFu1c  {
  unsigned int v1:7;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_I_BFu1c) C1{ Fi:7 Fi Fc:1}



static void Test_BFu7i_I_BFu1c()
{
  {
    init_simple_test("BFu7i_I_BFu1c");
    static STRUCT_IF_C BFu7i_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu1c, BFu7i_I_BFu1c)
//============================================================================


struct  BFu7i_I_BFu1i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_I_BFu1i) C1{ Fi:7 Fi Fi:1}



static void Test_BFu7i_I_BFu1i()
{
  {
    init_simple_test("BFu7i_I_BFu1i");
    static STRUCT_IF_C BFu7i_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu1i, BFu7i_I_BFu1i)
//============================================================================


struct  BFu7i_I_BFu1ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_I_BFu1ll) C1{ Fi:7 Fi FL:1}



static void Test_BFu7i_I_BFu1ll()
{
  {
    init_simple_test("BFu7i_I_BFu1ll");
    static STRUCT_IF_C BFu7i_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu1ll, BFu7i_I_BFu1ll)
//============================================================================


struct  BFu7i_I_BFu1s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_I_BFu1s) C1{ Fi:7 Fi Fs:1}



static void Test_BFu7i_I_BFu1s()
{
  {
    init_simple_test("BFu7i_I_BFu1s");
    static STRUCT_IF_C BFu7i_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu1s, BFu7i_I_BFu1s)
//============================================================================


struct  BFu7i_I_BFu31i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_I_BFu31i) C1{ Fi:7 Fi Fi:31}



static void Test_BFu7i_I_BFu31i()
{
  {
    init_simple_test("BFu7i_I_BFu31i");
    static STRUCT_IF_C BFu7i_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu31i, BFu7i_I_BFu31i)
//============================================================================


struct  BFu7i_I_BFu31ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_I_BFu31ll) C1{ Fi:7 Fi FL:31}



static void Test_BFu7i_I_BFu31ll()
{
  {
    init_simple_test("BFu7i_I_BFu31ll");
    static STRUCT_IF_C BFu7i_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu31ll, BFu7i_I_BFu31ll)
//============================================================================


struct  BFu7i_I_BFu32i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_I_BFu32i) C1{ Fi:7 Fi Fi:32}



static void Test_BFu7i_I_BFu32i()
{
  {
    init_simple_test("BFu7i_I_BFu32i");
    static STRUCT_IF_C BFu7i_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu32i, BFu7i_I_BFu32i)
//============================================================================


struct  BFu7i_I_BFu32ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_I_BFu32ll) C1{ Fi:7 Fi FL:32}



static void Test_BFu7i_I_BFu32ll()
{
  {
    init_simple_test("BFu7i_I_BFu32ll");
    static STRUCT_IF_C BFu7i_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu32ll, BFu7i_I_BFu32ll)
//============================================================================


struct  BFu7i_I_BFu33  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_I_BFu33) C1{ Fi:7 Fi FL:33}



static void Test_BFu7i_I_BFu33()
{
  {
    init_simple_test("BFu7i_I_BFu33");
    static STRUCT_IF_C BFu7i_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7i_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7i_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu33, BFu7i_I_BFu33)
//============================================================================


struct  BFu7i_I_BFu7c  {
  unsigned int v1:7;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_I_BFu7c) C1{ Fi:7 Fi Fc:7}



static void Test_BFu7i_I_BFu7c()
{
  {
    init_simple_test("BFu7i_I_BFu7c");
    static STRUCT_IF_C BFu7i_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu7c, BFu7i_I_BFu7c)
//============================================================================


struct  BFu7i_I_BFu7i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_I_BFu7i) C1{ Fi:7 Fi Fi:7}



static void Test_BFu7i_I_BFu7i()
{
  {
    init_simple_test("BFu7i_I_BFu7i");
    static STRUCT_IF_C BFu7i_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu7i, BFu7i_I_BFu7i)
//============================================================================


struct  BFu7i_I_BFu7ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_I_BFu7ll) C1{ Fi:7 Fi FL:7}



static void Test_BFu7i_I_BFu7ll()
{
  {
    init_simple_test("BFu7i_I_BFu7ll");
    static STRUCT_IF_C BFu7i_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu7ll, BFu7i_I_BFu7ll)
//============================================================================


struct  BFu7i_I_BFu7s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_I_BFu7s) C1{ Fi:7 Fi Fs:7}



static void Test_BFu7i_I_BFu7s()
{
  {
    init_simple_test("BFu7i_I_BFu7s");
    static STRUCT_IF_C BFu7i_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu7s, BFu7i_I_BFu7s)
//============================================================================


struct  BFu7i_I_BFu8c  {
  unsigned int v1:7;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_I_BFu8c) C1{ Fi:7 Fi Fc:8}



static void Test_BFu7i_I_BFu8c()
{
  {
    init_simple_test("BFu7i_I_BFu8c");
    static STRUCT_IF_C BFu7i_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu8c, BFu7i_I_BFu8c)
//============================================================================


struct  BFu7i_I_BFu8i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_I_BFu8i) C1{ Fi:7 Fi Fi:8}



static void Test_BFu7i_I_BFu8i()
{
  {
    init_simple_test("BFu7i_I_BFu8i");
    static STRUCT_IF_C BFu7i_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu8i, BFu7i_I_BFu8i)
//============================================================================


struct  BFu7i_I_BFu8ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_I_BFu8ll) C1{ Fi:7 Fi FL:8}



static void Test_BFu7i_I_BFu8ll()
{
  {
    init_simple_test("BFu7i_I_BFu8ll");
    static STRUCT_IF_C BFu7i_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu8ll, BFu7i_I_BFu8ll)
//============================================================================


struct  BFu7i_I_BFu8s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_I_BFu8s) C1{ Fi:7 Fi Fs:8}



static void Test_BFu7i_I_BFu8s()
{
  {
    init_simple_test("BFu7i_I_BFu8s");
    static STRUCT_IF_C BFu7i_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu8s, BFu7i_I_BFu8s)
//============================================================================


struct  BFu7i_I_BFu9i  {
  unsigned int v1:7;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_I_BFu9i) C1{ Fi:7 Fi Fi:9}



static void Test_BFu7i_I_BFu9i()
{
  {
    init_simple_test("BFu7i_I_BFu9i");
    static STRUCT_IF_C BFu7i_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu9i, BFu7i_I_BFu9i)
//============================================================================


struct  BFu7i_I_BFu9ll  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_I_BFu9ll) C1{ Fi:7 Fi FL:9}



static void Test_BFu7i_I_BFu9ll()
{
  {
    init_simple_test("BFu7i_I_BFu9ll");
    static STRUCT_IF_C BFu7i_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu9ll, BFu7i_I_BFu9ll)
//============================================================================


struct  BFu7i_I_BFu9s  {
  unsigned int v1:7;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_I_BFu9s) C1{ Fi:7 Fi Fs:9}



static void Test_BFu7i_I_BFu9s()
{
  {
    init_simple_test("BFu7i_I_BFu9s");
    static STRUCT_IF_C BFu7i_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_BFu9s, BFu7i_I_BFu9s)
//============================================================================


struct  BFu7i_I_C  {
  unsigned int v1:7;
  int v2;
  char v3;
};
//SIG(1 BFu7i_I_C) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_I_C()
{
  {
    init_simple_test("BFu7i_I_C");
    static STRUCT_IF_C BFu7i_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_C");
    check_field_offset(lv, v2, 4, "BFu7i_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_C, BFu7i_I_C)
//============================================================================


struct  BFu7i_I_D  {
  unsigned int v1:7;
  int v2;
  double v3;
};
//SIG(1 BFu7i_I_D) C1{ Fi:7 Fi FL}



static void Test_BFu7i_I_D()
{
  {
    init_simple_test("BFu7i_I_D");
    static STRUCT_IF_C BFu7i_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_D");
    check_field_offset(lv, v2, 4, "BFu7i_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_D, BFu7i_I_D)
//============================================================================


struct  BFu7i_I_F  {
  unsigned int v1:7;
  int v2;
  float v3;
};
//SIG(1 BFu7i_I_F) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_I_F()
{
  {
    init_simple_test("BFu7i_I_F");
    static STRUCT_IF_C BFu7i_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_F");
    check_field_offset(lv, v2, 4, "BFu7i_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_F, BFu7i_I_F)
//============================================================================


struct  BFu7i_I_I  {
  unsigned int v1:7;
  int v2;
  int v3;
};
//SIG(1 BFu7i_I_I) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_I_I()
{
  {
    init_simple_test("BFu7i_I_I");
    static STRUCT_IF_C BFu7i_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_I");
    check_field_offset(lv, v2, 4, "BFu7i_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_I, BFu7i_I_I)
//============================================================================


struct  BFu7i_I_Ip  {
  unsigned int v1:7;
  int v2;
  int *v3;
};
//SIG(1 BFu7i_I_Ip) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_I_Ip()
{
  {
    init_simple_test("BFu7i_I_Ip");
    static STRUCT_IF_C BFu7i_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Ip");
    check_field_offset(lv, v2, 4, "BFu7i_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Ip, BFu7i_I_Ip)
//============================================================================


struct  BFu7i_I_L  {
  unsigned int v1:7;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_I_L) C1{ Fi:7 Fi FL}



static void Test_BFu7i_I_L()
{
  {
    init_simple_test("BFu7i_I_L");
    static STRUCT_IF_C BFu7i_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_L");
    check_field_offset(lv, v2, 4, "BFu7i_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_L, BFu7i_I_L)
//============================================================================


struct  BFu7i_I_S  {
  unsigned int v1:7;
  int v2;
  short v3;
};
//SIG(1 BFu7i_I_S) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_I_S()
{
  {
    init_simple_test("BFu7i_I_S");
    static STRUCT_IF_C BFu7i_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_S");
    check_field_offset(lv, v2, 4, "BFu7i_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_S, BFu7i_I_S)
//============================================================================


struct  BFu7i_I_Uc  {
  unsigned int v1:7;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu7i_I_Uc) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_I_Uc()
{
  {
    init_simple_test("BFu7i_I_Uc");
    static STRUCT_IF_C BFu7i_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Uc");
    check_field_offset(lv, v2, 4, "BFu7i_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Uc, BFu7i_I_Uc)
//============================================================================


struct  BFu7i_I_Ui  {
  unsigned int v1:7;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu7i_I_Ui) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_I_Ui()
{
  {
    init_simple_test("BFu7i_I_Ui");
    static STRUCT_IF_C BFu7i_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Ui, BFu7i_I_Ui)
//============================================================================


struct  BFu7i_I_Ul  {
  unsigned int v1:7;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_I_Ul) C1{ Fi:7 Fi FL}



static void Test_BFu7i_I_Ul()
{
  {
    init_simple_test("BFu7i_I_Ul");
    static STRUCT_IF_C BFu7i_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Ul");
    check_field_offset(lv, v2, 4, "BFu7i_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Ul, BFu7i_I_Ul)
//============================================================================


struct  BFu7i_I_Us  {
  unsigned int v1:7;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu7i_I_Us) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_I_Us()
{
  {
    init_simple_test("BFu7i_I_Us");
    static STRUCT_IF_C BFu7i_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Us");
    check_field_offset(lv, v2, 4, "BFu7i_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Us, BFu7i_I_Us)
//============================================================================


struct  BFu7i_I_Vp  {
  unsigned int v1:7;
  int v2;
  void *v3;
};
//SIG(1 BFu7i_I_Vp) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_I_Vp()
{
  {
    init_simple_test("BFu7i_I_Vp");
    static STRUCT_IF_C BFu7i_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_Vp");
    check_field_offset(lv, v2, 4, "BFu7i_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7i_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_I_Vp, BFu7i_I_Vp)
//============================================================================


struct  BFu7i_Ip  {
  unsigned int v1:7;
  int *v2;
};
//SIG(1 BFu7i_Ip) C1{ Fi:7 Fp}



static void Test_BFu7i_Ip()
{
  {
    init_simple_test("BFu7i_Ip");
    static STRUCT_IF_C BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip, BFu7i_Ip)
//============================================================================


struct  BFu7i_Ip_BFu15i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Ip_BFu15i) C1{ Fi:7 Fp Fi:15}



static void Test_BFu7i_Ip_BFu15i()
{
  {
    init_simple_test("BFu7i_Ip_BFu15i");
    static STRUCT_IF_C BFu7i_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu15i, BFu7i_Ip_BFu15i)
//============================================================================


struct  BFu7i_Ip_BFu15ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Ip_BFu15ll) C1{ Fi:7 Fp FL:15}



static void Test_BFu7i_Ip_BFu15ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu15ll");
    static STRUCT_IF_C BFu7i_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu15ll, BFu7i_Ip_BFu15ll)
//============================================================================


struct  BFu7i_Ip_BFu15s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Ip_BFu15s) C1{ Fi:7 Fp Fs:15}



static void Test_BFu7i_Ip_BFu15s()
{
  {
    init_simple_test("BFu7i_Ip_BFu15s");
    static STRUCT_IF_C BFu7i_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu15s, BFu7i_Ip_BFu15s)
//============================================================================


struct  BFu7i_Ip_BFu16i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Ip_BFu16i) C1{ Fi:7 Fp Fi:16}



static void Test_BFu7i_Ip_BFu16i()
{
  {
    init_simple_test("BFu7i_Ip_BFu16i");
    static STRUCT_IF_C BFu7i_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu16i, BFu7i_Ip_BFu16i)
//============================================================================


struct  BFu7i_Ip_BFu16ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Ip_BFu16ll) C1{ Fi:7 Fp FL:16}



static void Test_BFu7i_Ip_BFu16ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu16ll");
    static STRUCT_IF_C BFu7i_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu16ll, BFu7i_Ip_BFu16ll)
//============================================================================


struct  BFu7i_Ip_BFu16s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Ip_BFu16s) C1{ Fi:7 Fp Fs:16}



static void Test_BFu7i_Ip_BFu16s()
{
  {
    init_simple_test("BFu7i_Ip_BFu16s");
    static STRUCT_IF_C BFu7i_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu16s, BFu7i_Ip_BFu16s)
//============================================================================


struct  BFu7i_Ip_BFu17i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Ip_BFu17i) C1{ Fi:7 Fp Fi:17}



static void Test_BFu7i_Ip_BFu17i()
{
  {
    init_simple_test("BFu7i_Ip_BFu17i");
    static STRUCT_IF_C BFu7i_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7i_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7i_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu17i, BFu7i_Ip_BFu17i)
//============================================================================


struct  BFu7i_Ip_BFu17ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Ip_BFu17ll) C1{ Fi:7 Fp FL:17}



static void Test_BFu7i_Ip_BFu17ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu17ll");
    static STRUCT_IF_C BFu7i_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7i_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7i_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu17ll, BFu7i_Ip_BFu17ll)
//============================================================================


struct  BFu7i_Ip_BFu1c  {
  unsigned int v1:7;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Ip_BFu1c) C1{ Fi:7 Fp Fc:1}



static void Test_BFu7i_Ip_BFu1c()
{
  {
    init_simple_test("BFu7i_Ip_BFu1c");
    static STRUCT_IF_C BFu7i_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu1c, BFu7i_Ip_BFu1c)
//============================================================================


struct  BFu7i_Ip_BFu1i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Ip_BFu1i) C1{ Fi:7 Fp Fi:1}



static void Test_BFu7i_Ip_BFu1i()
{
  {
    init_simple_test("BFu7i_Ip_BFu1i");
    static STRUCT_IF_C BFu7i_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu1i, BFu7i_Ip_BFu1i)
//============================================================================


struct  BFu7i_Ip_BFu1ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Ip_BFu1ll) C1{ Fi:7 Fp FL:1}



static void Test_BFu7i_Ip_BFu1ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu1ll");
    static STRUCT_IF_C BFu7i_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu1ll, BFu7i_Ip_BFu1ll)
//============================================================================


struct  BFu7i_Ip_BFu1s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Ip_BFu1s) C1{ Fi:7 Fp Fs:1}



static void Test_BFu7i_Ip_BFu1s()
{
  {
    init_simple_test("BFu7i_Ip_BFu1s");
    static STRUCT_IF_C BFu7i_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu1s, BFu7i_Ip_BFu1s)
//============================================================================


struct  BFu7i_Ip_BFu31i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Ip_BFu31i) C1{ Fi:7 Fp Fi:31}



static void Test_BFu7i_Ip_BFu31i()
{
  {
    init_simple_test("BFu7i_Ip_BFu31i");
    static STRUCT_IF_C BFu7i_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7i_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7i_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu31i, BFu7i_Ip_BFu31i)
//============================================================================


struct  BFu7i_Ip_BFu31ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Ip_BFu31ll) C1{ Fi:7 Fp FL:31}



static void Test_BFu7i_Ip_BFu31ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu31ll");
    static STRUCT_IF_C BFu7i_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7i_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7i_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu31ll, BFu7i_Ip_BFu31ll)
//============================================================================


struct  BFu7i_Ip_BFu32i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Ip_BFu32i) C1{ Fi:7 Fp Fi:32}



static void Test_BFu7i_Ip_BFu32i()
{
  {
    init_simple_test("BFu7i_Ip_BFu32i");
    static STRUCT_IF_C BFu7i_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7i_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7i_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu32i, BFu7i_Ip_BFu32i)
//============================================================================


struct  BFu7i_Ip_BFu32ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Ip_BFu32ll) C1{ Fi:7 Fp FL:32}



static void Test_BFu7i_Ip_BFu32ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu32ll");
    static STRUCT_IF_C BFu7i_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7i_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7i_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu32ll, BFu7i_Ip_BFu32ll)
//============================================================================


struct  BFu7i_Ip_BFu33  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Ip_BFu33) C1{ Fi:7 Fp FL:33}



static void Test_BFu7i_Ip_BFu33()
{
  {
    init_simple_test("BFu7i_Ip_BFu33");
    static STRUCT_IF_C BFu7i_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7i_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7i_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu33, BFu7i_Ip_BFu33)
//============================================================================


struct  BFu7i_Ip_BFu7c  {
  unsigned int v1:7;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Ip_BFu7c) C1{ Fi:7 Fp Fc:7}



static void Test_BFu7i_Ip_BFu7c()
{
  {
    init_simple_test("BFu7i_Ip_BFu7c");
    static STRUCT_IF_C BFu7i_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu7c, BFu7i_Ip_BFu7c)
//============================================================================


struct  BFu7i_Ip_BFu7i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Ip_BFu7i) C1{ Fi:7 Fp Fi:7}



static void Test_BFu7i_Ip_BFu7i()
{
  {
    init_simple_test("BFu7i_Ip_BFu7i");
    static STRUCT_IF_C BFu7i_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu7i, BFu7i_Ip_BFu7i)
//============================================================================


struct  BFu7i_Ip_BFu7ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Ip_BFu7ll) C1{ Fi:7 Fp FL:7}



static void Test_BFu7i_Ip_BFu7ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu7ll");
    static STRUCT_IF_C BFu7i_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu7ll, BFu7i_Ip_BFu7ll)
//============================================================================


struct  BFu7i_Ip_BFu7s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Ip_BFu7s) C1{ Fi:7 Fp Fs:7}



static void Test_BFu7i_Ip_BFu7s()
{
  {
    init_simple_test("BFu7i_Ip_BFu7s");
    static STRUCT_IF_C BFu7i_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu7s, BFu7i_Ip_BFu7s)
//============================================================================


struct  BFu7i_Ip_BFu8c  {
  unsigned int v1:7;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Ip_BFu8c) C1{ Fi:7 Fp Fc:8}



static void Test_BFu7i_Ip_BFu8c()
{
  {
    init_simple_test("BFu7i_Ip_BFu8c");
    static STRUCT_IF_C BFu7i_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu8c, BFu7i_Ip_BFu8c)
//============================================================================


struct  BFu7i_Ip_BFu8i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Ip_BFu8i) C1{ Fi:7 Fp Fi:8}



static void Test_BFu7i_Ip_BFu8i()
{
  {
    init_simple_test("BFu7i_Ip_BFu8i");
    static STRUCT_IF_C BFu7i_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu8i, BFu7i_Ip_BFu8i)
//============================================================================


struct  BFu7i_Ip_BFu8ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Ip_BFu8ll) C1{ Fi:7 Fp FL:8}



static void Test_BFu7i_Ip_BFu8ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu8ll");
    static STRUCT_IF_C BFu7i_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu8ll, BFu7i_Ip_BFu8ll)
//============================================================================


struct  BFu7i_Ip_BFu8s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Ip_BFu8s) C1{ Fi:7 Fp Fs:8}



static void Test_BFu7i_Ip_BFu8s()
{
  {
    init_simple_test("BFu7i_Ip_BFu8s");
    static STRUCT_IF_C BFu7i_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu8s, BFu7i_Ip_BFu8s)
//============================================================================


struct  BFu7i_Ip_BFu9i  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Ip_BFu9i) C1{ Fi:7 Fp Fi:9}



static void Test_BFu7i_Ip_BFu9i()
{
  {
    init_simple_test("BFu7i_Ip_BFu9i");
    static STRUCT_IF_C BFu7i_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu9i, BFu7i_Ip_BFu9i)
//============================================================================


struct  BFu7i_Ip_BFu9ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Ip_BFu9ll) C1{ Fi:7 Fp FL:9}



static void Test_BFu7i_Ip_BFu9ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu9ll");
    static STRUCT_IF_C BFu7i_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu9ll, BFu7i_Ip_BFu9ll)
//============================================================================


struct  BFu7i_Ip_BFu9s  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Ip_BFu9s) C1{ Fi:7 Fp Fs:9}



static void Test_BFu7i_Ip_BFu9s()
{
  {
    init_simple_test("BFu7i_Ip_BFu9s");
    static STRUCT_IF_C BFu7i_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_BFu9s, BFu7i_Ip_BFu9s)
//============================================================================


struct  BFu7i_Ip_C  {
  unsigned int v1:7;
  int *v2;
  char v3;
};
//SIG(1 BFu7i_Ip_C) C1{ Fi:7 Fp Fc}



static void Test_BFu7i_Ip_C()
{
  {
    init_simple_test("BFu7i_Ip_C");
    static STRUCT_IF_C BFu7i_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_C, BFu7i_Ip_C)
//============================================================================


struct  BFu7i_Ip_D  {
  unsigned int v1:7;
  int *v2;
  double v3;
};
//SIG(1 BFu7i_Ip_D) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Ip_D()
{
  {
    init_simple_test("BFu7i_Ip_D");
    static STRUCT_IF_C BFu7i_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_D, BFu7i_Ip_D)
//============================================================================


struct  BFu7i_Ip_F  {
  unsigned int v1:7;
  int *v2;
  float v3;
};
//SIG(1 BFu7i_Ip_F) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Ip_F()
{
  {
    init_simple_test("BFu7i_Ip_F");
    static STRUCT_IF_C BFu7i_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_F, BFu7i_Ip_F)
//============================================================================


struct  BFu7i_Ip_I  {
  unsigned int v1:7;
  int *v2;
  int v3;
};
//SIG(1 BFu7i_Ip_I) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Ip_I()
{
  {
    init_simple_test("BFu7i_Ip_I");
    static STRUCT_IF_C BFu7i_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_I, BFu7i_Ip_I)
//============================================================================


struct  BFu7i_Ip_Ip  {
  unsigned int v1:7;
  int *v2;
  int *v3;
};
//SIG(1 BFu7i_Ip_Ip) C1{ Fi:7 Fp[2]}



static void Test_BFu7i_Ip_Ip()
{
  {
    init_simple_test("BFu7i_Ip_Ip");
    static STRUCT_IF_C BFu7i_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Ip, BFu7i_Ip_Ip)
//============================================================================


struct  BFu7i_Ip_L  {
  unsigned int v1:7;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Ip_L) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Ip_L()
{
  {
    init_simple_test("BFu7i_Ip_L");
    static STRUCT_IF_C BFu7i_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_L, BFu7i_Ip_L)
//============================================================================


struct  BFu7i_Ip_S  {
  unsigned int v1:7;
  int *v2;
  short v3;
};
//SIG(1 BFu7i_Ip_S) C1{ Fi:7 Fp Fs}



static void Test_BFu7i_Ip_S()
{
  {
    init_simple_test("BFu7i_Ip_S");
    static STRUCT_IF_C BFu7i_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_S, BFu7i_Ip_S)
//============================================================================


struct  BFu7i_Ip_Uc  {
  unsigned int v1:7;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Ip_Uc) C1{ Fi:7 Fp Fc}



static void Test_BFu7i_Ip_Uc()
{
  {
    init_simple_test("BFu7i_Ip_Uc");
    static STRUCT_IF_C BFu7i_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Uc, BFu7i_Ip_Uc)
//============================================================================


struct  BFu7i_Ip_Ui  {
  unsigned int v1:7;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Ip_Ui) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Ip_Ui()
{
  {
    init_simple_test("BFu7i_Ip_Ui");
    static STRUCT_IF_C BFu7i_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Ui, BFu7i_Ip_Ui)
//============================================================================


struct  BFu7i_Ip_Ul  {
  unsigned int v1:7;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Ip_Ul) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Ip_Ul()
{
  {
    init_simple_test("BFu7i_Ip_Ul");
    static STRUCT_IF_C BFu7i_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Ul, BFu7i_Ip_Ul)
//============================================================================


struct  BFu7i_Ip_Us  {
  unsigned int v1:7;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Ip_Us) C1{ Fi:7 Fp Fs}



static void Test_BFu7i_Ip_Us()
{
  {
    init_simple_test("BFu7i_Ip_Us");
    static STRUCT_IF_C BFu7i_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Us, BFu7i_Ip_Us)
//============================================================================


struct  BFu7i_Ip_Vp  {
  unsigned int v1:7;
  int *v2;
  void *v3;
};
//SIG(1 BFu7i_Ip_Vp) C1{ Fi:7 Fp[2]}



static void Test_BFu7i_Ip_Vp()
{
  {
    init_simple_test("BFu7i_Ip_Vp");
    static STRUCT_IF_C BFu7i_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ip_Vp, BFu7i_Ip_Vp)
//============================================================================


struct  BFu7i_L  {
  unsigned int v1:7;
  __tsi64 v2;
};
//SIG(1 BFu7i_L) C1{ Fi:7 FL}



static void Test_BFu7i_L()
{
  {
    init_simple_test("BFu7i_L");
    static STRUCT_IF_C BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L, BFu7i_L)
//============================================================================


struct  BFu7i_L_BFu15i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_L_BFu15i) C1{ Fi:7 FL Fi:15}



static void Test_BFu7i_L_BFu15i()
{
  {
    init_simple_test("BFu7i_L_BFu15i");
    static STRUCT_IF_C BFu7i_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu15i, BFu7i_L_BFu15i)
//============================================================================


struct  BFu7i_L_BFu15ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_L_BFu15ll) C1{ Fi:7 FL FL:15}



static void Test_BFu7i_L_BFu15ll()
{
  {
    init_simple_test("BFu7i_L_BFu15ll");
    static STRUCT_IF_C BFu7i_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu15ll, BFu7i_L_BFu15ll)
//============================================================================


struct  BFu7i_L_BFu15s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_L_BFu15s) C1{ Fi:7 FL Fs:15}



static void Test_BFu7i_L_BFu15s()
{
  {
    init_simple_test("BFu7i_L_BFu15s");
    static STRUCT_IF_C BFu7i_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu15s, BFu7i_L_BFu15s)
//============================================================================


struct  BFu7i_L_BFu16i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_L_BFu16i) C1{ Fi:7 FL Fi:16}



static void Test_BFu7i_L_BFu16i()
{
  {
    init_simple_test("BFu7i_L_BFu16i");
    static STRUCT_IF_C BFu7i_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu16i, BFu7i_L_BFu16i)
//============================================================================


struct  BFu7i_L_BFu16ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_L_BFu16ll) C1{ Fi:7 FL FL:16}



static void Test_BFu7i_L_BFu16ll()
{
  {
    init_simple_test("BFu7i_L_BFu16ll");
    static STRUCT_IF_C BFu7i_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu16ll, BFu7i_L_BFu16ll)
//============================================================================


struct  BFu7i_L_BFu16s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_L_BFu16s) C1{ Fi:7 FL Fs:16}



static void Test_BFu7i_L_BFu16s()
{
  {
    init_simple_test("BFu7i_L_BFu16s");
    static STRUCT_IF_C BFu7i_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu16s, BFu7i_L_BFu16s)
//============================================================================


struct  BFu7i_L_BFu17i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_L_BFu17i) C1{ Fi:7 FL Fi:17}



static void Test_BFu7i_L_BFu17i()
{
  {
    init_simple_test("BFu7i_L_BFu17i");
    static STRUCT_IF_C BFu7i_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu17i, BFu7i_L_BFu17i)
//============================================================================


struct  BFu7i_L_BFu17ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_L_BFu17ll) C1{ Fi:7 FL FL:17}



static void Test_BFu7i_L_BFu17ll()
{
  {
    init_simple_test("BFu7i_L_BFu17ll");
    static STRUCT_IF_C BFu7i_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu17ll, BFu7i_L_BFu17ll)
//============================================================================


struct  BFu7i_L_BFu1c  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_L_BFu1c) C1{ Fi:7 FL Fc:1}



static void Test_BFu7i_L_BFu1c()
{
  {
    init_simple_test("BFu7i_L_BFu1c");
    static STRUCT_IF_C BFu7i_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu1c, BFu7i_L_BFu1c)
//============================================================================


struct  BFu7i_L_BFu1i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_L_BFu1i) C1{ Fi:7 FL Fi:1}



static void Test_BFu7i_L_BFu1i()
{
  {
    init_simple_test("BFu7i_L_BFu1i");
    static STRUCT_IF_C BFu7i_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu1i, BFu7i_L_BFu1i)
//============================================================================


struct  BFu7i_L_BFu1ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_L_BFu1ll) C1{ Fi:7 FL FL:1}



static void Test_BFu7i_L_BFu1ll()
{
  {
    init_simple_test("BFu7i_L_BFu1ll");
    static STRUCT_IF_C BFu7i_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu1ll, BFu7i_L_BFu1ll)
//============================================================================


struct  BFu7i_L_BFu1s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_L_BFu1s) C1{ Fi:7 FL Fs:1}



static void Test_BFu7i_L_BFu1s()
{
  {
    init_simple_test("BFu7i_L_BFu1s");
    static STRUCT_IF_C BFu7i_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu1s, BFu7i_L_BFu1s)
//============================================================================


struct  BFu7i_L_BFu31i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_L_BFu31i) C1{ Fi:7 FL Fi:31}



static void Test_BFu7i_L_BFu31i()
{
  {
    init_simple_test("BFu7i_L_BFu31i");
    static STRUCT_IF_C BFu7i_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu31i, BFu7i_L_BFu31i)
//============================================================================


struct  BFu7i_L_BFu31ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_L_BFu31ll) C1{ Fi:7 FL FL:31}



static void Test_BFu7i_L_BFu31ll()
{
  {
    init_simple_test("BFu7i_L_BFu31ll");
    static STRUCT_IF_C BFu7i_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu31ll, BFu7i_L_BFu31ll)
//============================================================================


struct  BFu7i_L_BFu32i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_L_BFu32i) C1{ Fi:7 FL Fi:32}



static void Test_BFu7i_L_BFu32i()
{
  {
    init_simple_test("BFu7i_L_BFu32i");
    static STRUCT_IF_C BFu7i_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu32i, BFu7i_L_BFu32i)
//============================================================================


struct  BFu7i_L_BFu32ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_L_BFu32ll) C1{ Fi:7 FL FL:32}



static void Test_BFu7i_L_BFu32ll()
{
  {
    init_simple_test("BFu7i_L_BFu32ll");
    static STRUCT_IF_C BFu7i_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu32ll, BFu7i_L_BFu32ll)
//============================================================================


struct  BFu7i_L_BFu33  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_L_BFu33) C1{ Fi:7 FL FL:33}



static void Test_BFu7i_L_BFu33()
{
  {
    init_simple_test("BFu7i_L_BFu33");
    static STRUCT_IF_C BFu7i_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7i_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7i_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu33, BFu7i_L_BFu33)
//============================================================================


struct  BFu7i_L_BFu7c  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_L_BFu7c) C1{ Fi:7 FL Fc:7}



static void Test_BFu7i_L_BFu7c()
{
  {
    init_simple_test("BFu7i_L_BFu7c");
    static STRUCT_IF_C BFu7i_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu7c, BFu7i_L_BFu7c)
//============================================================================


struct  BFu7i_L_BFu7i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_L_BFu7i) C1{ Fi:7 FL Fi:7}



static void Test_BFu7i_L_BFu7i()
{
  {
    init_simple_test("BFu7i_L_BFu7i");
    static STRUCT_IF_C BFu7i_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu7i, BFu7i_L_BFu7i)
//============================================================================


struct  BFu7i_L_BFu7ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_L_BFu7ll) C1{ Fi:7 FL FL:7}



static void Test_BFu7i_L_BFu7ll()
{
  {
    init_simple_test("BFu7i_L_BFu7ll");
    static STRUCT_IF_C BFu7i_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu7ll, BFu7i_L_BFu7ll)
//============================================================================


struct  BFu7i_L_BFu7s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_L_BFu7s) C1{ Fi:7 FL Fs:7}



static void Test_BFu7i_L_BFu7s()
{
  {
    init_simple_test("BFu7i_L_BFu7s");
    static STRUCT_IF_C BFu7i_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu7s, BFu7i_L_BFu7s)
//============================================================================


struct  BFu7i_L_BFu8c  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_L_BFu8c) C1{ Fi:7 FL Fc:8}



static void Test_BFu7i_L_BFu8c()
{
  {
    init_simple_test("BFu7i_L_BFu8c");
    static STRUCT_IF_C BFu7i_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu8c, BFu7i_L_BFu8c)
//============================================================================


struct  BFu7i_L_BFu8i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_L_BFu8i) C1{ Fi:7 FL Fi:8}



static void Test_BFu7i_L_BFu8i()
{
  {
    init_simple_test("BFu7i_L_BFu8i");
    static STRUCT_IF_C BFu7i_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu8i, BFu7i_L_BFu8i)
//============================================================================


struct  BFu7i_L_BFu8ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_L_BFu8ll) C1{ Fi:7 FL FL:8}



static void Test_BFu7i_L_BFu8ll()
{
  {
    init_simple_test("BFu7i_L_BFu8ll");
    static STRUCT_IF_C BFu7i_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu8ll, BFu7i_L_BFu8ll)
//============================================================================


struct  BFu7i_L_BFu8s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_L_BFu8s) C1{ Fi:7 FL Fs:8}



static void Test_BFu7i_L_BFu8s()
{
  {
    init_simple_test("BFu7i_L_BFu8s");
    static STRUCT_IF_C BFu7i_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu8s, BFu7i_L_BFu8s)
//============================================================================


struct  BFu7i_L_BFu9i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_L_BFu9i) C1{ Fi:7 FL Fi:9}



static void Test_BFu7i_L_BFu9i()
{
  {
    init_simple_test("BFu7i_L_BFu9i");
    static STRUCT_IF_C BFu7i_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu9i, BFu7i_L_BFu9i)
//============================================================================


struct  BFu7i_L_BFu9ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_L_BFu9ll) C1{ Fi:7 FL FL:9}



static void Test_BFu7i_L_BFu9ll()
{
  {
    init_simple_test("BFu7i_L_BFu9ll");
    static STRUCT_IF_C BFu7i_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu9ll, BFu7i_L_BFu9ll)
//============================================================================


struct  BFu7i_L_BFu9s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_L_BFu9s) C1{ Fi:7 FL Fs:9}



static void Test_BFu7i_L_BFu9s()
{
  {
    init_simple_test("BFu7i_L_BFu9s");
    static STRUCT_IF_C BFu7i_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_BFu9s, BFu7i_L_BFu9s)
//============================================================================


struct  BFu7i_L_C  {
  unsigned int v1:7;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu7i_L_C) C1{ Fi:7 FL Fc}



static void Test_BFu7i_L_C()
{
  {
    init_simple_test("BFu7i_L_C");
    static STRUCT_IF_C BFu7i_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_C, BFu7i_L_C)
//============================================================================


struct  BFu7i_L_D  {
  unsigned int v1:7;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu7i_L_D) C1{ Fi:7 FL[2]}



static void Test_BFu7i_L_D()
{
  {
    init_simple_test("BFu7i_L_D");
    static STRUCT_IF_C BFu7i_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_D, BFu7i_L_D)
//============================================================================


struct  BFu7i_L_F  {
  unsigned int v1:7;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu7i_L_F) C1{ Fi:7 FL Fi}



static void Test_BFu7i_L_F()
{
  {
    init_simple_test("BFu7i_L_F");
    static STRUCT_IF_C BFu7i_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_F, BFu7i_L_F)
//============================================================================


struct  BFu7i_L_I  {
  unsigned int v1:7;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu7i_L_I) C1{ Fi:7 FL Fi}



static void Test_BFu7i_L_I()
{
  {
    init_simple_test("BFu7i_L_I");
    static STRUCT_IF_C BFu7i_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_I, BFu7i_L_I)
//============================================================================


struct  BFu7i_L_Ip  {
  unsigned int v1:7;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu7i_L_Ip) C1{ Fi:7 FL Fp}



static void Test_BFu7i_L_Ip()
{
  {
    init_simple_test("BFu7i_L_Ip");
    static STRUCT_IF_C BFu7i_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Ip, BFu7i_L_Ip)
//============================================================================


struct  BFu7i_L_L  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_L_L) C1{ Fi:7 FL[2]}



static void Test_BFu7i_L_L()
{
  {
    init_simple_test("BFu7i_L_L");
    static STRUCT_IF_C BFu7i_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_L, BFu7i_L_L)
//============================================================================


struct  BFu7i_L_S  {
  unsigned int v1:7;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu7i_L_S) C1{ Fi:7 FL Fs}



static void Test_BFu7i_L_S()
{
  {
    init_simple_test("BFu7i_L_S");
    static STRUCT_IF_C BFu7i_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_S, BFu7i_L_S)
//============================================================================


struct  BFu7i_L_Uc  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu7i_L_Uc) C1{ Fi:7 FL Fc}



static void Test_BFu7i_L_Uc()
{
  {
    init_simple_test("BFu7i_L_Uc");
    static STRUCT_IF_C BFu7i_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Uc, BFu7i_L_Uc)
//============================================================================


struct  BFu7i_L_Ui  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu7i_L_Ui) C1{ Fi:7 FL Fi}



static void Test_BFu7i_L_Ui()
{
  {
    init_simple_test("BFu7i_L_Ui");
    static STRUCT_IF_C BFu7i_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Ui, BFu7i_L_Ui)
//============================================================================


struct  BFu7i_L_Ul  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_L_Ul) C1{ Fi:7 FL[2]}



static void Test_BFu7i_L_Ul()
{
  {
    init_simple_test("BFu7i_L_Ul");
    static STRUCT_IF_C BFu7i_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Ul, BFu7i_L_Ul)
//============================================================================


struct  BFu7i_L_Us  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu7i_L_Us) C1{ Fi:7 FL Fs}



static void Test_BFu7i_L_Us()
{
  {
    init_simple_test("BFu7i_L_Us");
    static STRUCT_IF_C BFu7i_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Us, BFu7i_L_Us)
//============================================================================


struct  BFu7i_L_Vp  {
  unsigned int v1:7;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu7i_L_Vp) C1{ Fi:7 FL Fp}



static void Test_BFu7i_L_Vp()
{
  {
    init_simple_test("BFu7i_L_Vp");
    static STRUCT_IF_C BFu7i_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_L_Vp, BFu7i_L_Vp)
//============================================================================


struct  BFu7i_S  {
  unsigned int v1:7;
  short v2;
};
//SIG(1 BFu7i_S) C1{ Fi:7 Fs}



static void Test_BFu7i_S()
{
  {
    init_simple_test("BFu7i_S");
    static STRUCT_IF_C BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S");
    check_field_offset(lv, v2, 2, "BFu7i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S, BFu7i_S)
//============================================================================


struct  BFu7i_S_BFu15i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_S_BFu15i) C1{ Fi:7 Fs Fi:15}



static void Test_BFu7i_S_BFu15i()
{
  {
    init_simple_test("BFu7i_S_BFu15i");
    static STRUCT_IF_C BFu7i_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu15i, BFu7i_S_BFu15i)
//============================================================================


struct  BFu7i_S_BFu15ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_S_BFu15ll) C1{ Fi:7 Fs FL:15}



static void Test_BFu7i_S_BFu15ll()
{
  {
    init_simple_test("BFu7i_S_BFu15ll");
    static STRUCT_IF_C BFu7i_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu15ll, BFu7i_S_BFu15ll)
//============================================================================


struct  BFu7i_S_BFu15s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_S_BFu15s) C1{ Fi:7 Fs Fs:15}



static void Test_BFu7i_S_BFu15s()
{
  {
    init_simple_test("BFu7i_S_BFu15s");
    static STRUCT_IF_C BFu7i_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu15s, BFu7i_S_BFu15s)
//============================================================================


struct  BFu7i_S_BFu16i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_S_BFu16i) C1{ Fi:7 Fs Fi:16}



static void Test_BFu7i_S_BFu16i()
{
  {
    init_simple_test("BFu7i_S_BFu16i");
    static STRUCT_IF_C BFu7i_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu16i, BFu7i_S_BFu16i)
//============================================================================


struct  BFu7i_S_BFu16ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_S_BFu16ll) C1{ Fi:7 Fs FL:16}



static void Test_BFu7i_S_BFu16ll()
{
  {
    init_simple_test("BFu7i_S_BFu16ll");
    static STRUCT_IF_C BFu7i_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu16ll, BFu7i_S_BFu16ll)
//============================================================================


struct  BFu7i_S_BFu16s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_S_BFu16s) C1{ Fi:7 Fs Fs:16}



static void Test_BFu7i_S_BFu16s()
{
  {
    init_simple_test("BFu7i_S_BFu16s");
    static STRUCT_IF_C BFu7i_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu16s, BFu7i_S_BFu16s)
//============================================================================


struct  BFu7i_S_BFu17i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_S_BFu17i) C1{ Fi:7 Fs Fi:17}



static void Test_BFu7i_S_BFu17i()
{
  {
    init_simple_test("BFu7i_S_BFu17i");
    static STRUCT_IF_C BFu7i_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu17i, BFu7i_S_BFu17i)
//============================================================================


struct  BFu7i_S_BFu17ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_S_BFu17ll) C1{ Fi:7 Fs FL:17}



static void Test_BFu7i_S_BFu17ll()
{
  {
    init_simple_test("BFu7i_S_BFu17ll");
    static STRUCT_IF_C BFu7i_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu17ll, BFu7i_S_BFu17ll)
//============================================================================


struct  BFu7i_S_BFu1c  {
  unsigned int v1:7;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_S_BFu1c) C1{ Fi:7 Fs Fc:1}



static void Test_BFu7i_S_BFu1c()
{
  {
    init_simple_test("BFu7i_S_BFu1c");
    static STRUCT_IF_C BFu7i_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu1c, BFu7i_S_BFu1c)
//============================================================================


struct  BFu7i_S_BFu1i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_S_BFu1i) C1{ Fi:7 Fs Fi:1}



static void Test_BFu7i_S_BFu1i()
{
  {
    init_simple_test("BFu7i_S_BFu1i");
    static STRUCT_IF_C BFu7i_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu1i, BFu7i_S_BFu1i)
//============================================================================


struct  BFu7i_S_BFu1ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_S_BFu1ll) C1{ Fi:7 Fs FL:1}



static void Test_BFu7i_S_BFu1ll()
{
  {
    init_simple_test("BFu7i_S_BFu1ll");
    static STRUCT_IF_C BFu7i_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu1ll, BFu7i_S_BFu1ll)
//============================================================================


struct  BFu7i_S_BFu1s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_S_BFu1s) C1{ Fi:7 Fs Fs:1}



static void Test_BFu7i_S_BFu1s()
{
  {
    init_simple_test("BFu7i_S_BFu1s");
    static STRUCT_IF_C BFu7i_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu1s, BFu7i_S_BFu1s)
//============================================================================


struct  BFu7i_S_BFu31i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_S_BFu31i) C1{ Fi:7 Fs Fi:31}



static void Test_BFu7i_S_BFu31i()
{
  {
    init_simple_test("BFu7i_S_BFu31i");
    static STRUCT_IF_C BFu7i_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu31i, BFu7i_S_BFu31i)
//============================================================================


struct  BFu7i_S_BFu31ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_S_BFu31ll) C1{ Fi:7 Fs FL:31}



static void Test_BFu7i_S_BFu31ll()
{
  {
    init_simple_test("BFu7i_S_BFu31ll");
    static STRUCT_IF_C BFu7i_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu31ll, BFu7i_S_BFu31ll)
//============================================================================


struct  BFu7i_S_BFu32i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_S_BFu32i) C1{ Fi:7 Fs Fi:32}



static void Test_BFu7i_S_BFu32i()
{
  {
    init_simple_test("BFu7i_S_BFu32i");
    static STRUCT_IF_C BFu7i_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu32i, BFu7i_S_BFu32i)
//============================================================================


struct  BFu7i_S_BFu32ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_S_BFu32ll) C1{ Fi:7 Fs FL:32}



static void Test_BFu7i_S_BFu32ll()
{
  {
    init_simple_test("BFu7i_S_BFu32ll");
    static STRUCT_IF_C BFu7i_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu32ll, BFu7i_S_BFu32ll)
//============================================================================


struct  BFu7i_S_BFu33  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_S_BFu33) C1{ Fi:7 Fs FL:33}



static void Test_BFu7i_S_BFu33()
{
  {
    init_simple_test("BFu7i_S_BFu33");
    static STRUCT_IF_C BFu7i_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7i_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7i_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu33, BFu7i_S_BFu33)
//============================================================================


struct  BFu7i_S_BFu7c  {
  unsigned int v1:7;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_S_BFu7c) C1{ Fi:7 Fs Fc:7}



static void Test_BFu7i_S_BFu7c()
{
  {
    init_simple_test("BFu7i_S_BFu7c");
    static STRUCT_IF_C BFu7i_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu7c, BFu7i_S_BFu7c)
//============================================================================


struct  BFu7i_S_BFu7i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_S_BFu7i) C1{ Fi:7 Fs Fi:7}



static void Test_BFu7i_S_BFu7i()
{
  {
    init_simple_test("BFu7i_S_BFu7i");
    static STRUCT_IF_C BFu7i_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu7i, BFu7i_S_BFu7i)
//============================================================================


struct  BFu7i_S_BFu7ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_S_BFu7ll) C1{ Fi:7 Fs FL:7}



static void Test_BFu7i_S_BFu7ll()
{
  {
    init_simple_test("BFu7i_S_BFu7ll");
    static STRUCT_IF_C BFu7i_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu7ll, BFu7i_S_BFu7ll)
//============================================================================


struct  BFu7i_S_BFu7s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_S_BFu7s) C1{ Fi:7 Fs Fs:7}



static void Test_BFu7i_S_BFu7s()
{
  {
    init_simple_test("BFu7i_S_BFu7s");
    static STRUCT_IF_C BFu7i_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu7s, BFu7i_S_BFu7s)
//============================================================================


struct  BFu7i_S_BFu8c  {
  unsigned int v1:7;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_S_BFu8c) C1{ Fi:7 Fs Fc:8}



static void Test_BFu7i_S_BFu8c()
{
  {
    init_simple_test("BFu7i_S_BFu8c");
    static STRUCT_IF_C BFu7i_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu8c, BFu7i_S_BFu8c)
//============================================================================


struct  BFu7i_S_BFu8i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_S_BFu8i) C1{ Fi:7 Fs Fi:8}



static void Test_BFu7i_S_BFu8i()
{
  {
    init_simple_test("BFu7i_S_BFu8i");
    static STRUCT_IF_C BFu7i_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu8i, BFu7i_S_BFu8i)
//============================================================================


struct  BFu7i_S_BFu8ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_S_BFu8ll) C1{ Fi:7 Fs FL:8}



static void Test_BFu7i_S_BFu8ll()
{
  {
    init_simple_test("BFu7i_S_BFu8ll");
    static STRUCT_IF_C BFu7i_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu8ll, BFu7i_S_BFu8ll)
//============================================================================


struct  BFu7i_S_BFu8s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_S_BFu8s) C1{ Fi:7 Fs Fs:8}



static void Test_BFu7i_S_BFu8s()
{
  {
    init_simple_test("BFu7i_S_BFu8s");
    static STRUCT_IF_C BFu7i_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu8s, BFu7i_S_BFu8s)
//============================================================================


struct  BFu7i_S_BFu9i  {
  unsigned int v1:7;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_S_BFu9i) C1{ Fi:7 Fs Fi:9}



static void Test_BFu7i_S_BFu9i()
{
  {
    init_simple_test("BFu7i_S_BFu9i");
    static STRUCT_IF_C BFu7i_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu9i, BFu7i_S_BFu9i)
//============================================================================


struct  BFu7i_S_BFu9ll  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_S_BFu9ll) C1{ Fi:7 Fs FL:9}



static void Test_BFu7i_S_BFu9ll()
{
  {
    init_simple_test("BFu7i_S_BFu9ll");
    static STRUCT_IF_C BFu7i_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu9ll, BFu7i_S_BFu9ll)
//============================================================================


struct  BFu7i_S_BFu9s  {
  unsigned int v1:7;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_S_BFu9s) C1{ Fi:7 Fs Fs:9}



static void Test_BFu7i_S_BFu9s()
{
  {
    init_simple_test("BFu7i_S_BFu9s");
    static STRUCT_IF_C BFu7i_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_BFu9s, BFu7i_S_BFu9s)
//============================================================================


struct  BFu7i_S_C  {
  unsigned int v1:7;
  short v2;
  char v3;
};
//SIG(1 BFu7i_S_C) C1{ Fi:7 Fs Fc}



static void Test_BFu7i_S_C()
{
  {
    init_simple_test("BFu7i_S_C");
    static STRUCT_IF_C BFu7i_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_C");
    check_field_offset(lv, v2, 2, "BFu7i_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_C, BFu7i_S_C)
//============================================================================


struct  BFu7i_S_D  {
  unsigned int v1:7;
  short v2;
  double v3;
};
//SIG(1 BFu7i_S_D) C1{ Fi:7 Fs FL}



static void Test_BFu7i_S_D()
{
  {
    init_simple_test("BFu7i_S_D");
    static STRUCT_IF_C BFu7i_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_D");
    check_field_offset(lv, v2, 2, "BFu7i_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_D, BFu7i_S_D)
//============================================================================


struct  BFu7i_S_F  {
  unsigned int v1:7;
  short v2;
  float v3;
};
//SIG(1 BFu7i_S_F) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_S_F()
{
  {
    init_simple_test("BFu7i_S_F");
    static STRUCT_IF_C BFu7i_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_F");
    check_field_offset(lv, v2, 2, "BFu7i_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_F, BFu7i_S_F)
//============================================================================


struct  BFu7i_S_I  {
  unsigned int v1:7;
  short v2;
  int v3;
};
//SIG(1 BFu7i_S_I) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_S_I()
{
  {
    init_simple_test("BFu7i_S_I");
    static STRUCT_IF_C BFu7i_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_I");
    check_field_offset(lv, v2, 2, "BFu7i_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_I, BFu7i_S_I)
//============================================================================


struct  BFu7i_S_Ip  {
  unsigned int v1:7;
  short v2;
  int *v3;
};
//SIG(1 BFu7i_S_Ip) C1{ Fi:7 Fs Fp}



static void Test_BFu7i_S_Ip()
{
  {
    init_simple_test("BFu7i_S_Ip");
    static STRUCT_IF_C BFu7i_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Ip");
    check_field_offset(lv, v2, 2, "BFu7i_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Ip, BFu7i_S_Ip)
//============================================================================


struct  BFu7i_S_L  {
  unsigned int v1:7;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_S_L) C1{ Fi:7 Fs FL}



static void Test_BFu7i_S_L()
{
  {
    init_simple_test("BFu7i_S_L");
    static STRUCT_IF_C BFu7i_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_L");
    check_field_offset(lv, v2, 2, "BFu7i_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_L, BFu7i_S_L)
//============================================================================


struct  BFu7i_S_S  {
  unsigned int v1:7;
  short v2;
  short v3;
};
//SIG(1 BFu7i_S_S) C1{ Fi:7 Fs[2]}



static void Test_BFu7i_S_S()
{
  {
    init_simple_test("BFu7i_S_S");
    static STRUCT_IF_C BFu7i_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_S");
    check_field_offset(lv, v2, 2, "BFu7i_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_S, BFu7i_S_S)
//============================================================================


struct  BFu7i_S_Uc  {
  unsigned int v1:7;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu7i_S_Uc) C1{ Fi:7 Fs Fc}



static void Test_BFu7i_S_Uc()
{
  {
    init_simple_test("BFu7i_S_Uc");
    static STRUCT_IF_C BFu7i_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Uc");
    check_field_offset(lv, v2, 2, "BFu7i_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Uc, BFu7i_S_Uc)
//============================================================================


struct  BFu7i_S_Ui  {
  unsigned int v1:7;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu7i_S_Ui) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_S_Ui()
{
  {
    init_simple_test("BFu7i_S_Ui");
    static STRUCT_IF_C BFu7i_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Ui");
    check_field_offset(lv, v2, 2, "BFu7i_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Ui, BFu7i_S_Ui)
//============================================================================


struct  BFu7i_S_Ul  {
  unsigned int v1:7;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_S_Ul) C1{ Fi:7 Fs FL}



static void Test_BFu7i_S_Ul()
{
  {
    init_simple_test("BFu7i_S_Ul");
    static STRUCT_IF_C BFu7i_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Ul");
    check_field_offset(lv, v2, 2, "BFu7i_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Ul, BFu7i_S_Ul)
//============================================================================


struct  BFu7i_S_Us  {
  unsigned int v1:7;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu7i_S_Us) C1{ Fi:7 Fs[2]}



static void Test_BFu7i_S_Us()
{
  {
    init_simple_test("BFu7i_S_Us");
    static STRUCT_IF_C BFu7i_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_S_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Us");
    check_field_offset(lv, v2, 2, "BFu7i_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7i_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Us, BFu7i_S_Us)
//============================================================================


struct  BFu7i_S_Vp  {
  unsigned int v1:7;
  short v2;
  void *v3;
};
//SIG(1 BFu7i_S_Vp) C1{ Fi:7 Fs Fp}



static void Test_BFu7i_S_Vp()
{
  {
    init_simple_test("BFu7i_S_Vp");
    static STRUCT_IF_C BFu7i_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_Vp");
    check_field_offset(lv, v2, 2, "BFu7i_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_S_Vp, BFu7i_S_Vp)
//============================================================================


struct  BFu7i_Uc  {
  unsigned int v1:7;
  unsigned char v2;
};
//SIG(1 BFu7i_Uc) C1{ Fi:7 Fc}



static void Test_BFu7i_Uc()
{
  {
    init_simple_test("BFu7i_Uc");
    static STRUCT_IF_C BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc");
    check_field_offset(lv, v2, 1, "BFu7i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc, BFu7i_Uc)
//============================================================================


struct  BFu7i_Uc_BFu15i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Uc_BFu15i) C1{ Fi:7 Fc Fi:15}



static void Test_BFu7i_Uc_BFu15i()
{
  {
    init_simple_test("BFu7i_Uc_BFu15i");
    static STRUCT_IF_C BFu7i_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu15i, BFu7i_Uc_BFu15i)
//============================================================================


struct  BFu7i_Uc_BFu15ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Uc_BFu15ll) C1{ Fi:7 Fc FL:15}



static void Test_BFu7i_Uc_BFu15ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu15ll");
    static STRUCT_IF_C BFu7i_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu15ll, BFu7i_Uc_BFu15ll)
//============================================================================


struct  BFu7i_Uc_BFu15s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Uc_BFu15s) C1{ Fi:7 Fc Fs:15}



static void Test_BFu7i_Uc_BFu15s()
{
  {
    init_simple_test("BFu7i_Uc_BFu15s");
    static STRUCT_IF_C BFu7i_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu15s, BFu7i_Uc_BFu15s)
//============================================================================


struct  BFu7i_Uc_BFu16i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Uc_BFu16i) C1{ Fi:7 Fc Fi:16}



static void Test_BFu7i_Uc_BFu16i()
{
  {
    init_simple_test("BFu7i_Uc_BFu16i");
    static STRUCT_IF_C BFu7i_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu16i, BFu7i_Uc_BFu16i)
//============================================================================


struct  BFu7i_Uc_BFu16ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Uc_BFu16ll) C1{ Fi:7 Fc FL:16}



static void Test_BFu7i_Uc_BFu16ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu16ll");
    static STRUCT_IF_C BFu7i_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu16ll, BFu7i_Uc_BFu16ll)
//============================================================================


struct  BFu7i_Uc_BFu16s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Uc_BFu16s) C1{ Fi:7 Fc Fs:16}



static void Test_BFu7i_Uc_BFu16s()
{
  {
    init_simple_test("BFu7i_Uc_BFu16s");
    static STRUCT_IF_C BFu7i_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu16s, BFu7i_Uc_BFu16s)
//============================================================================


struct  BFu7i_Uc_BFu17i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Uc_BFu17i) C1{ Fi:7 Fc Fi:17}



static void Test_BFu7i_Uc_BFu17i()
{
  {
    init_simple_test("BFu7i_Uc_BFu17i");
    static STRUCT_IF_C BFu7i_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu17i, BFu7i_Uc_BFu17i)
//============================================================================


struct  BFu7i_Uc_BFu17ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Uc_BFu17ll) C1{ Fi:7 Fc FL:17}



static void Test_BFu7i_Uc_BFu17ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu17ll");
    static STRUCT_IF_C BFu7i_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7i_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu17ll, BFu7i_Uc_BFu17ll)
//============================================================================


struct  BFu7i_Uc_BFu1c  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Uc_BFu1c) C1{ Fi:7 Fc Fc:1}



static void Test_BFu7i_Uc_BFu1c()
{
  {
    init_simple_test("BFu7i_Uc_BFu1c");
    static STRUCT_IF_C BFu7i_Uc_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu1c, BFu7i_Uc_BFu1c)
//============================================================================


struct  BFu7i_Uc_BFu1i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Uc_BFu1i) C1{ Fi:7 Fc Fi:1}



static void Test_BFu7i_Uc_BFu1i()
{
  {
    init_simple_test("BFu7i_Uc_BFu1i");
    static STRUCT_IF_C BFu7i_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu1i, BFu7i_Uc_BFu1i)
//============================================================================


struct  BFu7i_Uc_BFu1ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Uc_BFu1ll) C1{ Fi:7 Fc FL:1}



static void Test_BFu7i_Uc_BFu1ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu1ll");
    static STRUCT_IF_C BFu7i_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu1ll, BFu7i_Uc_BFu1ll)
//============================================================================


struct  BFu7i_Uc_BFu1s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Uc_BFu1s) C1{ Fi:7 Fc Fs:1}



static void Test_BFu7i_Uc_BFu1s()
{
  {
    init_simple_test("BFu7i_Uc_BFu1s");
    static STRUCT_IF_C BFu7i_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7i_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu1s, BFu7i_Uc_BFu1s)
//============================================================================


struct  BFu7i_Uc_BFu31i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Uc_BFu31i) C1{ Fi:7 Fc Fi:31}



static void Test_BFu7i_Uc_BFu31i()
{
  {
    init_simple_test("BFu7i_Uc_BFu31i");
    static STRUCT_IF_C BFu7i_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu31i, BFu7i_Uc_BFu31i)
//============================================================================


struct  BFu7i_Uc_BFu31ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Uc_BFu31ll) C1{ Fi:7 Fc FL:31}



static void Test_BFu7i_Uc_BFu31ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu31ll");
    static STRUCT_IF_C BFu7i_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7i_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu31ll, BFu7i_Uc_BFu31ll)
//============================================================================


struct  BFu7i_Uc_BFu32i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Uc_BFu32i) C1{ Fi:7 Fc Fi:32}



static void Test_BFu7i_Uc_BFu32i()
{
  {
    init_simple_test("BFu7i_Uc_BFu32i");
    static STRUCT_IF_C BFu7i_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu32i, BFu7i_Uc_BFu32i)
//============================================================================


struct  BFu7i_Uc_BFu32ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Uc_BFu32ll) C1{ Fi:7 Fc FL:32}



static void Test_BFu7i_Uc_BFu32ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu32ll");
    static STRUCT_IF_C BFu7i_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7i_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu32ll, BFu7i_Uc_BFu32ll)
//============================================================================


struct  BFu7i_Uc_BFu33  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Uc_BFu33) C1{ Fi:7 Fc FL:33}



static void Test_BFu7i_Uc_BFu33()
{
  {
    init_simple_test("BFu7i_Uc_BFu33");
    static STRUCT_IF_C BFu7i_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu33");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7i_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu33, BFu7i_Uc_BFu33)
//============================================================================


struct  BFu7i_Uc_BFu7c  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Uc_BFu7c) C1{ Fi:7 Fc Fc:7}



static void Test_BFu7i_Uc_BFu7c()
{
  {
    init_simple_test("BFu7i_Uc_BFu7c");
    static STRUCT_IF_C BFu7i_Uc_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu7c, BFu7i_Uc_BFu7c)
//============================================================================


struct  BFu7i_Uc_BFu7i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Uc_BFu7i) C1{ Fi:7 Fc Fi:7}



static void Test_BFu7i_Uc_BFu7i()
{
  {
    init_simple_test("BFu7i_Uc_BFu7i");
    static STRUCT_IF_C BFu7i_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu7i, BFu7i_Uc_BFu7i)
//============================================================================


struct  BFu7i_Uc_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Uc_BFu7ll) C1{ Fi:7 Fc FL:7}



static void Test_BFu7i_Uc_BFu7ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu7ll");
    static STRUCT_IF_C BFu7i_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu7ll, BFu7i_Uc_BFu7ll)
//============================================================================


struct  BFu7i_Uc_BFu7s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Uc_BFu7s) C1{ Fi:7 Fc Fs:7}



static void Test_BFu7i_Uc_BFu7s()
{
  {
    init_simple_test("BFu7i_Uc_BFu7s");
    static STRUCT_IF_C BFu7i_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu7s, BFu7i_Uc_BFu7s)
//============================================================================


struct  BFu7i_Uc_BFu8c  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Uc_BFu8c) C1{ Fi:7 Fc Fc:8}



static void Test_BFu7i_Uc_BFu8c()
{
  {
    init_simple_test("BFu7i_Uc_BFu8c");
    static STRUCT_IF_C BFu7i_Uc_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu8c, BFu7i_Uc_BFu8c)
//============================================================================


struct  BFu7i_Uc_BFu8i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Uc_BFu8i) C1{ Fi:7 Fc Fi:8}



static void Test_BFu7i_Uc_BFu8i()
{
  {
    init_simple_test("BFu7i_Uc_BFu8i");
    static STRUCT_IF_C BFu7i_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu8i, BFu7i_Uc_BFu8i)
//============================================================================


struct  BFu7i_Uc_BFu8ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Uc_BFu8ll) C1{ Fi:7 Fc FL:8}



static void Test_BFu7i_Uc_BFu8ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu8ll");
    static STRUCT_IF_C BFu7i_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu8ll, BFu7i_Uc_BFu8ll)
//============================================================================


struct  BFu7i_Uc_BFu8s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Uc_BFu8s) C1{ Fi:7 Fc Fs:8}



static void Test_BFu7i_Uc_BFu8s()
{
  {
    init_simple_test("BFu7i_Uc_BFu8s");
    static STRUCT_IF_C BFu7i_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7i_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu8s, BFu7i_Uc_BFu8s)
//============================================================================


struct  BFu7i_Uc_BFu9i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Uc_BFu9i) C1{ Fi:7 Fc Fi:9}



static void Test_BFu7i_Uc_BFu9i()
{
  {
    init_simple_test("BFu7i_Uc_BFu9i");
    static STRUCT_IF_C BFu7i_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu9i, BFu7i_Uc_BFu9i)
//============================================================================


struct  BFu7i_Uc_BFu9ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Uc_BFu9ll) C1{ Fi:7 Fc FL:9}



static void Test_BFu7i_Uc_BFu9ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu9ll");
    static STRUCT_IF_C BFu7i_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu9ll, BFu7i_Uc_BFu9ll)
//============================================================================


struct  BFu7i_Uc_BFu9s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Uc_BFu9s) C1{ Fi:7 Fc Fs:9}



static void Test_BFu7i_Uc_BFu9s()
{
  {
    init_simple_test("BFu7i_Uc_BFu9s");
    static STRUCT_IF_C BFu7i_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_BFu9s, BFu7i_Uc_BFu9s)
//============================================================================


struct  BFu7i_Uc_C  {
  unsigned int v1:7;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu7i_Uc_C) C1{ Fi:7 Fc[2]}



static void Test_BFu7i_Uc_C()
{
  {
    init_simple_test("BFu7i_Uc_C");
    static STRUCT_IF_C BFu7i_Uc_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_C");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_C.v2");
    check_field_offset(lv, v3, 2, "BFu7i_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_C, BFu7i_Uc_C)
//============================================================================


struct  BFu7i_Uc_D  {
  unsigned int v1:7;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu7i_Uc_D) C1{ Fi:7 Fc FL}



static void Test_BFu7i_Uc_D()
{
  {
    init_simple_test("BFu7i_Uc_D");
    static STRUCT_IF_C BFu7i_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_D");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_D, BFu7i_Uc_D)
//============================================================================


struct  BFu7i_Uc_F  {
  unsigned int v1:7;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu7i_Uc_F) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_Uc_F()
{
  {
    init_simple_test("BFu7i_Uc_F");
    static STRUCT_IF_C BFu7i_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_F");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_F, BFu7i_Uc_F)
//============================================================================


struct  BFu7i_Uc_I  {
  unsigned int v1:7;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu7i_Uc_I) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_Uc_I()
{
  {
    init_simple_test("BFu7i_Uc_I");
    static STRUCT_IF_C BFu7i_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_I");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_I, BFu7i_Uc_I)
//============================================================================


struct  BFu7i_Uc_Ip  {
  unsigned int v1:7;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu7i_Uc_Ip) C1{ Fi:7 Fc Fp}



static void Test_BFu7i_Uc_Ip()
{
  {
    init_simple_test("BFu7i_Uc_Ip");
    static STRUCT_IF_C BFu7i_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Ip");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Ip, BFu7i_Uc_Ip)
//============================================================================


struct  BFu7i_Uc_L  {
  unsigned int v1:7;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Uc_L) C1{ Fi:7 Fc FL}



static void Test_BFu7i_Uc_L()
{
  {
    init_simple_test("BFu7i_Uc_L");
    static STRUCT_IF_C BFu7i_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_L");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_L, BFu7i_Uc_L)
//============================================================================


struct  BFu7i_Uc_S  {
  unsigned int v1:7;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu7i_Uc_S) C1{ Fi:7 Fc Fs}



static void Test_BFu7i_Uc_S()
{
  {
    init_simple_test("BFu7i_Uc_S");
    static STRUCT_IF_C BFu7i_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_S");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_S.v2");
    check_field_offset(lv, v3, 2, "BFu7i_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_S, BFu7i_Uc_S)
//============================================================================


struct  BFu7i_Uc_Uc  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Uc_Uc) C1{ Fi:7 Fc[2]}



static void Test_BFu7i_Uc_Uc()
{
  {
    init_simple_test("BFu7i_Uc_Uc");
    static STRUCT_IF_C BFu7i_Uc_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Uc");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7i_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Uc, BFu7i_Uc_Uc)
//============================================================================


struct  BFu7i_Uc_Ui  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Uc_Ui) C1{ Fi:7 Fc Fi}



static void Test_BFu7i_Uc_Ui()
{
  {
    init_simple_test("BFu7i_Uc_Ui");
    static STRUCT_IF_C BFu7i_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Ui");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Ui, BFu7i_Uc_Ui)
//============================================================================


struct  BFu7i_Uc_Ul  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Uc_Ul) C1{ Fi:7 Fc FL}



static void Test_BFu7i_Uc_Ul()
{
  {
    init_simple_test("BFu7i_Uc_Ul");
    static STRUCT_IF_C BFu7i_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Ul");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Ul, BFu7i_Uc_Ul)
//============================================================================


struct  BFu7i_Uc_Us  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Uc_Us) C1{ Fi:7 Fc Fs}



static void Test_BFu7i_Uc_Us()
{
  {
    init_simple_test("BFu7i_Uc_Us");
    static STRUCT_IF_C BFu7i_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Us");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7i_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Us, BFu7i_Uc_Us)
//============================================================================


struct  BFu7i_Uc_Vp  {
  unsigned int v1:7;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu7i_Uc_Vp) C1{ Fi:7 Fc Fp}



static void Test_BFu7i_Uc_Vp()
{
  {
    init_simple_test("BFu7i_Uc_Vp");
    static STRUCT_IF_C BFu7i_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_Vp");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Uc_Vp, BFu7i_Uc_Vp)
//============================================================================


struct  BFu7i_Ui  {
  unsigned int v1:7;
  unsigned int v2;
};
//SIG(1 BFu7i_Ui) C1{ Fi:7 Fi}



static void Test_BFu7i_Ui()
{
  {
    init_simple_test("BFu7i_Ui");
    static STRUCT_IF_C BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui, BFu7i_Ui)
//============================================================================


struct  BFu7i_Ui_BFu15i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Ui_BFu15i) C1{ Fi:7 Fi Fi:15}



static void Test_BFu7i_Ui_BFu15i()
{
  {
    init_simple_test("BFu7i_Ui_BFu15i");
    static STRUCT_IF_C BFu7i_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu15i, BFu7i_Ui_BFu15i)
//============================================================================


struct  BFu7i_Ui_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Ui_BFu15ll) C1{ Fi:7 Fi FL:15}



static void Test_BFu7i_Ui_BFu15ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu15ll");
    static STRUCT_IF_C BFu7i_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu15ll, BFu7i_Ui_BFu15ll)
//============================================================================


struct  BFu7i_Ui_BFu15s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Ui_BFu15s) C1{ Fi:7 Fi Fs:15}



static void Test_BFu7i_Ui_BFu15s()
{
  {
    init_simple_test("BFu7i_Ui_BFu15s");
    static STRUCT_IF_C BFu7i_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7i_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7i_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu15s, BFu7i_Ui_BFu15s)
//============================================================================


struct  BFu7i_Ui_BFu16i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Ui_BFu16i) C1{ Fi:7 Fi Fi:16}



static void Test_BFu7i_Ui_BFu16i()
{
  {
    init_simple_test("BFu7i_Ui_BFu16i");
    static STRUCT_IF_C BFu7i_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu16i, BFu7i_Ui_BFu16i)
//============================================================================


struct  BFu7i_Ui_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Ui_BFu16ll) C1{ Fi:7 Fi FL:16}



static void Test_BFu7i_Ui_BFu16ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu16ll");
    static STRUCT_IF_C BFu7i_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu16ll, BFu7i_Ui_BFu16ll)
//============================================================================


struct  BFu7i_Ui_BFu16s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Ui_BFu16s) C1{ Fi:7 Fi Fs:16}



static void Test_BFu7i_Ui_BFu16s()
{
  {
    init_simple_test("BFu7i_Ui_BFu16s");
    static STRUCT_IF_C BFu7i_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7i_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7i_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu16s, BFu7i_Ui_BFu16s)
//============================================================================


struct  BFu7i_Ui_BFu17i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Ui_BFu17i) C1{ Fi:7 Fi Fi:17}



static void Test_BFu7i_Ui_BFu17i()
{
  {
    init_simple_test("BFu7i_Ui_BFu17i");
    static STRUCT_IF_C BFu7i_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu17i, BFu7i_Ui_BFu17i)
//============================================================================


struct  BFu7i_Ui_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Ui_BFu17ll) C1{ Fi:7 Fi FL:17}



static void Test_BFu7i_Ui_BFu17ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu17ll");
    static STRUCT_IF_C BFu7i_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7i_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7i_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu17ll, BFu7i_Ui_BFu17ll)
//============================================================================


struct  BFu7i_Ui_BFu1c  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Ui_BFu1c) C1{ Fi:7 Fi Fc:1}



static void Test_BFu7i_Ui_BFu1c()
{
  {
    init_simple_test("BFu7i_Ui_BFu1c");
    static STRUCT_IF_C BFu7i_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu1c, BFu7i_Ui_BFu1c)
//============================================================================


struct  BFu7i_Ui_BFu1i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Ui_BFu1i) C1{ Fi:7 Fi Fi:1}



static void Test_BFu7i_Ui_BFu1i()
{
  {
    init_simple_test("BFu7i_Ui_BFu1i");
    static STRUCT_IF_C BFu7i_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu1i, BFu7i_Ui_BFu1i)
//============================================================================


struct  BFu7i_Ui_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Ui_BFu1ll) C1{ Fi:7 Fi FL:1}



static void Test_BFu7i_Ui_BFu1ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu1ll");
    static STRUCT_IF_C BFu7i_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu1ll, BFu7i_Ui_BFu1ll)
//============================================================================


struct  BFu7i_Ui_BFu1s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Ui_BFu1s) C1{ Fi:7 Fi Fs:1}



static void Test_BFu7i_Ui_BFu1s()
{
  {
    init_simple_test("BFu7i_Ui_BFu1s");
    static STRUCT_IF_C BFu7i_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7i_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu1s, BFu7i_Ui_BFu1s)
//============================================================================


struct  BFu7i_Ui_BFu31i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Ui_BFu31i) C1{ Fi:7 Fi Fi:31}



static void Test_BFu7i_Ui_BFu31i()
{
  {
    init_simple_test("BFu7i_Ui_BFu31i");
    static STRUCT_IF_C BFu7i_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu31i, BFu7i_Ui_BFu31i)
//============================================================================


struct  BFu7i_Ui_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Ui_BFu31ll) C1{ Fi:7 Fi FL:31}



static void Test_BFu7i_Ui_BFu31ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu31ll");
    static STRUCT_IF_C BFu7i_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7i_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7i_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu31ll, BFu7i_Ui_BFu31ll)
//============================================================================


struct  BFu7i_Ui_BFu32i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Ui_BFu32i) C1{ Fi:7 Fi Fi:32}



static void Test_BFu7i_Ui_BFu32i()
{
  {
    init_simple_test("BFu7i_Ui_BFu32i");
    static STRUCT_IF_C BFu7i_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu32i, BFu7i_Ui_BFu32i)
//============================================================================


struct  BFu7i_Ui_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Ui_BFu32ll) C1{ Fi:7 Fi FL:32}



static void Test_BFu7i_Ui_BFu32ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu32ll");
    static STRUCT_IF_C BFu7i_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7i_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7i_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu32ll, BFu7i_Ui_BFu32ll)
//============================================================================


struct  BFu7i_Ui_BFu33  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Ui_BFu33) C1{ Fi:7 Fi FL:33}



static void Test_BFu7i_Ui_BFu33()
{
  {
    init_simple_test("BFu7i_Ui_BFu33");
    static STRUCT_IF_C BFu7i_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7i_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7i_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu33, BFu7i_Ui_BFu33)
//============================================================================


struct  BFu7i_Ui_BFu7c  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Ui_BFu7c) C1{ Fi:7 Fi Fc:7}



static void Test_BFu7i_Ui_BFu7c()
{
  {
    init_simple_test("BFu7i_Ui_BFu7c");
    static STRUCT_IF_C BFu7i_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu7c, BFu7i_Ui_BFu7c)
//============================================================================


struct  BFu7i_Ui_BFu7i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Ui_BFu7i) C1{ Fi:7 Fi Fi:7}



static void Test_BFu7i_Ui_BFu7i()
{
  {
    init_simple_test("BFu7i_Ui_BFu7i");
    static STRUCT_IF_C BFu7i_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu7i, BFu7i_Ui_BFu7i)
//============================================================================


struct  BFu7i_Ui_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Ui_BFu7ll) C1{ Fi:7 Fi FL:7}



static void Test_BFu7i_Ui_BFu7ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu7ll");
    static STRUCT_IF_C BFu7i_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu7ll, BFu7i_Ui_BFu7ll)
//============================================================================


struct  BFu7i_Ui_BFu7s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Ui_BFu7s) C1{ Fi:7 Fi Fs:7}



static void Test_BFu7i_Ui_BFu7s()
{
  {
    init_simple_test("BFu7i_Ui_BFu7s");
    static STRUCT_IF_C BFu7i_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7i_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu7s, BFu7i_Ui_BFu7s)
//============================================================================


struct  BFu7i_Ui_BFu8c  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Ui_BFu8c) C1{ Fi:7 Fi Fc:8}



static void Test_BFu7i_Ui_BFu8c()
{
  {
    init_simple_test("BFu7i_Ui_BFu8c");
    static STRUCT_IF_C BFu7i_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu8c, BFu7i_Ui_BFu8c)
//============================================================================


struct  BFu7i_Ui_BFu8i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Ui_BFu8i) C1{ Fi:7 Fi Fi:8}



static void Test_BFu7i_Ui_BFu8i()
{
  {
    init_simple_test("BFu7i_Ui_BFu8i");
    static STRUCT_IF_C BFu7i_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu8i, BFu7i_Ui_BFu8i)
//============================================================================


struct  BFu7i_Ui_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Ui_BFu8ll) C1{ Fi:7 Fi FL:8}



static void Test_BFu7i_Ui_BFu8ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu8ll");
    static STRUCT_IF_C BFu7i_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu8ll, BFu7i_Ui_BFu8ll)
//============================================================================


struct  BFu7i_Ui_BFu8s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Ui_BFu8s) C1{ Fi:7 Fi Fs:8}



static void Test_BFu7i_Ui_BFu8s()
{
  {
    init_simple_test("BFu7i_Ui_BFu8s");
    static STRUCT_IF_C BFu7i_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7i_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7i_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu8s, BFu7i_Ui_BFu8s)
//============================================================================


struct  BFu7i_Ui_BFu9i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Ui_BFu9i) C1{ Fi:7 Fi Fi:9}



static void Test_BFu7i_Ui_BFu9i()
{
  {
    init_simple_test("BFu7i_Ui_BFu9i");
    static STRUCT_IF_C BFu7i_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu9i, BFu7i_Ui_BFu9i)
//============================================================================


struct  BFu7i_Ui_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Ui_BFu9ll) C1{ Fi:7 Fi FL:9}



static void Test_BFu7i_Ui_BFu9ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu9ll");
    static STRUCT_IF_C BFu7i_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu9ll, BFu7i_Ui_BFu9ll)
//============================================================================


struct  BFu7i_Ui_BFu9s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Ui_BFu9s) C1{ Fi:7 Fi Fs:9}



static void Test_BFu7i_Ui_BFu9s()
{
  {
    init_simple_test("BFu7i_Ui_BFu9s");
    static STRUCT_IF_C BFu7i_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7i_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7i_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_BFu9s, BFu7i_Ui_BFu9s)
//============================================================================


struct  BFu7i_Ui_C  {
  unsigned int v1:7;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu7i_Ui_C) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_Ui_C()
{
  {
    init_simple_test("BFu7i_Ui_C");
    static STRUCT_IF_C BFu7i_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_C");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_C, BFu7i_Ui_C)
//============================================================================


struct  BFu7i_Ui_D  {
  unsigned int v1:7;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu7i_Ui_D) C1{ Fi:7 Fi FL}



static void Test_BFu7i_Ui_D()
{
  {
    init_simple_test("BFu7i_Ui_D");
    static STRUCT_IF_C BFu7i_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_D");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_D, BFu7i_Ui_D)
//============================================================================


struct  BFu7i_Ui_F  {
  unsigned int v1:7;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu7i_Ui_F) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_Ui_F()
{
  {
    init_simple_test("BFu7i_Ui_F");
    static STRUCT_IF_C BFu7i_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_F");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_F, BFu7i_Ui_F)
//============================================================================


struct  BFu7i_Ui_I  {
  unsigned int v1:7;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu7i_Ui_I) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_Ui_I()
{
  {
    init_simple_test("BFu7i_Ui_I");
    static STRUCT_IF_C BFu7i_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_I");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_I, BFu7i_Ui_I)
//============================================================================


struct  BFu7i_Ui_Ip  {
  unsigned int v1:7;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu7i_Ui_Ip) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_Ui_Ip()
{
  {
    init_simple_test("BFu7i_Ui_Ip");
    static STRUCT_IF_C BFu7i_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Ip, BFu7i_Ui_Ip)
//============================================================================


struct  BFu7i_Ui_L  {
  unsigned int v1:7;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Ui_L) C1{ Fi:7 Fi FL}



static void Test_BFu7i_Ui_L()
{
  {
    init_simple_test("BFu7i_Ui_L");
    static STRUCT_IF_C BFu7i_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_L");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_L, BFu7i_Ui_L)
//============================================================================


struct  BFu7i_Ui_S  {
  unsigned int v1:7;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu7i_Ui_S) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_Ui_S()
{
  {
    init_simple_test("BFu7i_Ui_S");
    static STRUCT_IF_C BFu7i_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_S");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_S, BFu7i_Ui_S)
//============================================================================


struct  BFu7i_Ui_Uc  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Ui_Uc) C1{ Fi:7 Fi Fc}



static void Test_BFu7i_Ui_Uc()
{
  {
    init_simple_test("BFu7i_Ui_Uc");
    static STRUCT_IF_C BFu7i_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Uc, BFu7i_Ui_Uc)
//============================================================================


struct  BFu7i_Ui_Ui  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Ui_Ui) C1{ Fi:7 Fi[2]}



static void Test_BFu7i_Ui_Ui()
{
  {
    init_simple_test("BFu7i_Ui_Ui");
    static STRUCT_IF_C BFu7i_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Ui, BFu7i_Ui_Ui)
//============================================================================


struct  BFu7i_Ui_Ul  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Ui_Ul) C1{ Fi:7 Fi FL}



static void Test_BFu7i_Ui_Ul()
{
  {
    init_simple_test("BFu7i_Ui_Ul");
    static STRUCT_IF_C BFu7i_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7i_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Ul, BFu7i_Ui_Ul)
//============================================================================


struct  BFu7i_Ui_Us  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Ui_Us) C1{ Fi:7 Fi Fs}



static void Test_BFu7i_Ui_Us()
{
  {
    init_simple_test("BFu7i_Ui_Us");
    static STRUCT_IF_C BFu7i_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7i_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Us, BFu7i_Ui_Us)
//============================================================================


struct  BFu7i_Ui_Vp  {
  unsigned int v1:7;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu7i_Ui_Vp) C1{ Fi:7 Fi Fp}



static void Test_BFu7i_Ui_Vp()
{
  {
    init_simple_test("BFu7i_Ui_Vp");
    static STRUCT_IF_C BFu7i_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7i_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ui_Vp, BFu7i_Ui_Vp)
//============================================================================


struct  BFu7i_Ul  {
  unsigned int v1:7;
  __tsu64 v2;
};
//SIG(1 BFu7i_Ul) C1{ Fi:7 FL}



static void Test_BFu7i_Ul()
{
  {
    init_simple_test("BFu7i_Ul");
    static STRUCT_IF_C BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul, BFu7i_Ul)
//============================================================================


struct  BFu7i_Ul_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Ul_BFu15i) C1{ Fi:7 FL Fi:15}



static void Test_BFu7i_Ul_BFu15i()
{
  {
    init_simple_test("BFu7i_Ul_BFu15i");
    static STRUCT_IF_C BFu7i_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu15i, BFu7i_Ul_BFu15i)
//============================================================================


struct  BFu7i_Ul_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Ul_BFu15ll) C1{ Fi:7 FL FL:15}



static void Test_BFu7i_Ul_BFu15ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu15ll");
    static STRUCT_IF_C BFu7i_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu15ll, BFu7i_Ul_BFu15ll)
//============================================================================


struct  BFu7i_Ul_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Ul_BFu15s) C1{ Fi:7 FL Fs:15}



static void Test_BFu7i_Ul_BFu15s()
{
  {
    init_simple_test("BFu7i_Ul_BFu15s");
    static STRUCT_IF_C BFu7i_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7i_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7i_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu15s, BFu7i_Ul_BFu15s)
//============================================================================


struct  BFu7i_Ul_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Ul_BFu16i) C1{ Fi:7 FL Fi:16}



static void Test_BFu7i_Ul_BFu16i()
{
  {
    init_simple_test("BFu7i_Ul_BFu16i");
    static STRUCT_IF_C BFu7i_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu16i, BFu7i_Ul_BFu16i)
//============================================================================


struct  BFu7i_Ul_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Ul_BFu16ll) C1{ Fi:7 FL FL:16}



static void Test_BFu7i_Ul_BFu16ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu16ll");
    static STRUCT_IF_C BFu7i_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu16ll, BFu7i_Ul_BFu16ll)
//============================================================================


struct  BFu7i_Ul_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Ul_BFu16s) C1{ Fi:7 FL Fs:16}



static void Test_BFu7i_Ul_BFu16s()
{
  {
    init_simple_test("BFu7i_Ul_BFu16s");
    static STRUCT_IF_C BFu7i_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7i_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7i_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu16s, BFu7i_Ul_BFu16s)
//============================================================================


struct  BFu7i_Ul_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Ul_BFu17i) C1{ Fi:7 FL Fi:17}



static void Test_BFu7i_Ul_BFu17i()
{
  {
    init_simple_test("BFu7i_Ul_BFu17i");
    static STRUCT_IF_C BFu7i_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu17i, BFu7i_Ul_BFu17i)
//============================================================================


struct  BFu7i_Ul_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Ul_BFu17ll) C1{ Fi:7 FL FL:17}



static void Test_BFu7i_Ul_BFu17ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu17ll");
    static STRUCT_IF_C BFu7i_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7i_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7i_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu17ll, BFu7i_Ul_BFu17ll)
//============================================================================


struct  BFu7i_Ul_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Ul_BFu1c) C1{ Fi:7 FL Fc:1}



static void Test_BFu7i_Ul_BFu1c()
{
  {
    init_simple_test("BFu7i_Ul_BFu1c");
    static STRUCT_IF_C BFu7i_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu1c, BFu7i_Ul_BFu1c)
//============================================================================


struct  BFu7i_Ul_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Ul_BFu1i) C1{ Fi:7 FL Fi:1}



static void Test_BFu7i_Ul_BFu1i()
{
  {
    init_simple_test("BFu7i_Ul_BFu1i");
    static STRUCT_IF_C BFu7i_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu1i, BFu7i_Ul_BFu1i)
//============================================================================


struct  BFu7i_Ul_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Ul_BFu1ll) C1{ Fi:7 FL FL:1}



static void Test_BFu7i_Ul_BFu1ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu1ll");
    static STRUCT_IF_C BFu7i_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu1ll, BFu7i_Ul_BFu1ll)
//============================================================================


struct  BFu7i_Ul_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Ul_BFu1s) C1{ Fi:7 FL Fs:1}



static void Test_BFu7i_Ul_BFu1s()
{
  {
    init_simple_test("BFu7i_Ul_BFu1s");
    static STRUCT_IF_C BFu7i_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7i_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu1s, BFu7i_Ul_BFu1s)
//============================================================================


struct  BFu7i_Ul_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Ul_BFu31i) C1{ Fi:7 FL Fi:31}



static void Test_BFu7i_Ul_BFu31i()
{
  {
    init_simple_test("BFu7i_Ul_BFu31i");
    static STRUCT_IF_C BFu7i_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu31i, BFu7i_Ul_BFu31i)
//============================================================================


struct  BFu7i_Ul_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Ul_BFu31ll) C1{ Fi:7 FL FL:31}



static void Test_BFu7i_Ul_BFu31ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu31ll");
    static STRUCT_IF_C BFu7i_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7i_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7i_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu31ll, BFu7i_Ul_BFu31ll)
//============================================================================


struct  BFu7i_Ul_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Ul_BFu32i) C1{ Fi:7 FL Fi:32}



static void Test_BFu7i_Ul_BFu32i()
{
  {
    init_simple_test("BFu7i_Ul_BFu32i");
    static STRUCT_IF_C BFu7i_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu32i, BFu7i_Ul_BFu32i)
//============================================================================


struct  BFu7i_Ul_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Ul_BFu32ll) C1{ Fi:7 FL FL:32}



static void Test_BFu7i_Ul_BFu32ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu32ll");
    static STRUCT_IF_C BFu7i_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7i_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7i_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu32ll, BFu7i_Ul_BFu32ll)
//============================================================================


struct  BFu7i_Ul_BFu33  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Ul_BFu33) C1{ Fi:7 FL FL:33}



static void Test_BFu7i_Ul_BFu33()
{
  {
    init_simple_test("BFu7i_Ul_BFu33");
    static STRUCT_IF_C BFu7i_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7i_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7i_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu33, BFu7i_Ul_BFu33)
//============================================================================


struct  BFu7i_Ul_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Ul_BFu7c) C1{ Fi:7 FL Fc:7}



static void Test_BFu7i_Ul_BFu7c()
{
  {
    init_simple_test("BFu7i_Ul_BFu7c");
    static STRUCT_IF_C BFu7i_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu7c, BFu7i_Ul_BFu7c)
//============================================================================


struct  BFu7i_Ul_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Ul_BFu7i) C1{ Fi:7 FL Fi:7}



static void Test_BFu7i_Ul_BFu7i()
{
  {
    init_simple_test("BFu7i_Ul_BFu7i");
    static STRUCT_IF_C BFu7i_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu7i, BFu7i_Ul_BFu7i)
//============================================================================


struct  BFu7i_Ul_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Ul_BFu7ll) C1{ Fi:7 FL FL:7}



static void Test_BFu7i_Ul_BFu7ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu7ll");
    static STRUCT_IF_C BFu7i_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu7ll, BFu7i_Ul_BFu7ll)
//============================================================================


struct  BFu7i_Ul_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Ul_BFu7s) C1{ Fi:7 FL Fs:7}



static void Test_BFu7i_Ul_BFu7s()
{
  {
    init_simple_test("BFu7i_Ul_BFu7s");
    static STRUCT_IF_C BFu7i_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7i_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu7s, BFu7i_Ul_BFu7s)
//============================================================================


struct  BFu7i_Ul_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Ul_BFu8c) C1{ Fi:7 FL Fc:8}



static void Test_BFu7i_Ul_BFu8c()
{
  {
    init_simple_test("BFu7i_Ul_BFu8c");
    static STRUCT_IF_C BFu7i_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu8c, BFu7i_Ul_BFu8c)
//============================================================================


struct  BFu7i_Ul_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Ul_BFu8i) C1{ Fi:7 FL Fi:8}



static void Test_BFu7i_Ul_BFu8i()
{
  {
    init_simple_test("BFu7i_Ul_BFu8i");
    static STRUCT_IF_C BFu7i_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu8i, BFu7i_Ul_BFu8i)
//============================================================================


struct  BFu7i_Ul_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Ul_BFu8ll) C1{ Fi:7 FL FL:8}



static void Test_BFu7i_Ul_BFu8ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu8ll");
    static STRUCT_IF_C BFu7i_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu8ll, BFu7i_Ul_BFu8ll)
//============================================================================


struct  BFu7i_Ul_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Ul_BFu8s) C1{ Fi:7 FL Fs:8}



static void Test_BFu7i_Ul_BFu8s()
{
  {
    init_simple_test("BFu7i_Ul_BFu8s");
    static STRUCT_IF_C BFu7i_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7i_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7i_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu8s, BFu7i_Ul_BFu8s)
//============================================================================


struct  BFu7i_Ul_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Ul_BFu9i) C1{ Fi:7 FL Fi:9}



static void Test_BFu7i_Ul_BFu9i()
{
  {
    init_simple_test("BFu7i_Ul_BFu9i");
    static STRUCT_IF_C BFu7i_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu9i, BFu7i_Ul_BFu9i)
//============================================================================


struct  BFu7i_Ul_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Ul_BFu9ll) C1{ Fi:7 FL FL:9}



static void Test_BFu7i_Ul_BFu9ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu9ll");
    static STRUCT_IF_C BFu7i_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu9ll, BFu7i_Ul_BFu9ll)
//============================================================================


struct  BFu7i_Ul_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Ul_BFu9s) C1{ Fi:7 FL Fs:9}



static void Test_BFu7i_Ul_BFu9s()
{
  {
    init_simple_test("BFu7i_Ul_BFu9s");
    static STRUCT_IF_C BFu7i_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7i_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7i_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_BFu9s, BFu7i_Ul_BFu9s)
//============================================================================


struct  BFu7i_Ul_C  {
  unsigned int v1:7;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu7i_Ul_C) C1{ Fi:7 FL Fc}



static void Test_BFu7i_Ul_C()
{
  {
    init_simple_test("BFu7i_Ul_C");
    static STRUCT_IF_C BFu7i_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_C, BFu7i_Ul_C)
//============================================================================


struct  BFu7i_Ul_D  {
  unsigned int v1:7;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu7i_Ul_D) C1{ Fi:7 FL[2]}



static void Test_BFu7i_Ul_D()
{
  {
    init_simple_test("BFu7i_Ul_D");
    static STRUCT_IF_C BFu7i_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_D, BFu7i_Ul_D)
//============================================================================


struct  BFu7i_Ul_F  {
  unsigned int v1:7;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu7i_Ul_F) C1{ Fi:7 FL Fi}



static void Test_BFu7i_Ul_F()
{
  {
    init_simple_test("BFu7i_Ul_F");
    static STRUCT_IF_C BFu7i_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_F, BFu7i_Ul_F)
//============================================================================


struct  BFu7i_Ul_I  {
  unsigned int v1:7;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu7i_Ul_I) C1{ Fi:7 FL Fi}



static void Test_BFu7i_Ul_I()
{
  {
    init_simple_test("BFu7i_Ul_I");
    static STRUCT_IF_C BFu7i_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_I, BFu7i_Ul_I)
//============================================================================


struct  BFu7i_Ul_Ip  {
  unsigned int v1:7;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu7i_Ul_Ip) C1{ Fi:7 FL Fp}



static void Test_BFu7i_Ul_Ip()
{
  {
    init_simple_test("BFu7i_Ul_Ip");
    static STRUCT_IF_C BFu7i_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Ip, BFu7i_Ul_Ip)
//============================================================================


struct  BFu7i_Ul_L  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Ul_L) C1{ Fi:7 FL[2]}



static void Test_BFu7i_Ul_L()
{
  {
    init_simple_test("BFu7i_Ul_L");
    static STRUCT_IF_C BFu7i_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_L, BFu7i_Ul_L)
//============================================================================


struct  BFu7i_Ul_S  {
  unsigned int v1:7;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu7i_Ul_S) C1{ Fi:7 FL Fs}



static void Test_BFu7i_Ul_S()
{
  {
    init_simple_test("BFu7i_Ul_S");
    static STRUCT_IF_C BFu7i_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_S, BFu7i_Ul_S)
//============================================================================


struct  BFu7i_Ul_Uc  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Ul_Uc) C1{ Fi:7 FL Fc}



static void Test_BFu7i_Ul_Uc()
{
  {
    init_simple_test("BFu7i_Ul_Uc");
    static STRUCT_IF_C BFu7i_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Uc, BFu7i_Ul_Uc)
//============================================================================


struct  BFu7i_Ul_Ui  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Ul_Ui) C1{ Fi:7 FL Fi}



static void Test_BFu7i_Ul_Ui()
{
  {
    init_simple_test("BFu7i_Ul_Ui");
    static STRUCT_IF_C BFu7i_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Ui, BFu7i_Ul_Ui)
//============================================================================


struct  BFu7i_Ul_Ul  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Ul_Ul) C1{ Fi:7 FL[2]}



static void Test_BFu7i_Ul_Ul()
{
  {
    init_simple_test("BFu7i_Ul_Ul");
    static STRUCT_IF_C BFu7i_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7i_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Ul, BFu7i_Ul_Ul)
//============================================================================


struct  BFu7i_Ul_Us  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Ul_Us) C1{ Fi:7 FL Fs}



static void Test_BFu7i_Ul_Us()
{
  {
    init_simple_test("BFu7i_Ul_Us");
    static STRUCT_IF_C BFu7i_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Us, BFu7i_Ul_Us)
//============================================================================


struct  BFu7i_Ul_Vp  {
  unsigned int v1:7;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu7i_Ul_Vp) C1{ Fi:7 FL Fp}



static void Test_BFu7i_Ul_Vp()
{
  {
    init_simple_test("BFu7i_Ul_Vp");
    static STRUCT_IF_C BFu7i_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7i_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Ul_Vp, BFu7i_Ul_Vp)
//============================================================================


struct  BFu7i_Us  {
  unsigned int v1:7;
  unsigned short v2;
};
//SIG(1 BFu7i_Us) C1{ Fi:7 Fs}



static void Test_BFu7i_Us()
{
  {
    init_simple_test("BFu7i_Us");
    static STRUCT_IF_C BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us");
    check_field_offset(lv, v2, 2, "BFu7i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us, BFu7i_Us)
//============================================================================


struct  BFu7i_Us_BFu15i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Us_BFu15i) C1{ Fi:7 Fs Fi:15}



static void Test_BFu7i_Us_BFu15i()
{
  {
    init_simple_test("BFu7i_Us_BFu15i");
    static STRUCT_IF_C BFu7i_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu15i, BFu7i_Us_BFu15i)
//============================================================================


struct  BFu7i_Us_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Us_BFu15ll) C1{ Fi:7 Fs FL:15}



static void Test_BFu7i_Us_BFu15ll()
{
  {
    init_simple_test("BFu7i_Us_BFu15ll");
    static STRUCT_IF_C BFu7i_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu15ll, BFu7i_Us_BFu15ll)
//============================================================================


struct  BFu7i_Us_BFu15s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Us_BFu15s) C1{ Fi:7 Fs Fs:15}



static void Test_BFu7i_Us_BFu15s()
{
  {
    init_simple_test("BFu7i_Us_BFu15s");
    static STRUCT_IF_C BFu7i_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu15s, BFu7i_Us_BFu15s)
//============================================================================


struct  BFu7i_Us_BFu16i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Us_BFu16i) C1{ Fi:7 Fs Fi:16}



static void Test_BFu7i_Us_BFu16i()
{
  {
    init_simple_test("BFu7i_Us_BFu16i");
    static STRUCT_IF_C BFu7i_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu16i, BFu7i_Us_BFu16i)
//============================================================================


struct  BFu7i_Us_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Us_BFu16ll) C1{ Fi:7 Fs FL:16}



static void Test_BFu7i_Us_BFu16ll()
{
  {
    init_simple_test("BFu7i_Us_BFu16ll");
    static STRUCT_IF_C BFu7i_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu16ll, BFu7i_Us_BFu16ll)
//============================================================================


struct  BFu7i_Us_BFu16s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Us_BFu16s) C1{ Fi:7 Fs Fs:16}



static void Test_BFu7i_Us_BFu16s()
{
  {
    init_simple_test("BFu7i_Us_BFu16s");
    static STRUCT_IF_C BFu7i_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu16s, BFu7i_Us_BFu16s)
//============================================================================


struct  BFu7i_Us_BFu17i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Us_BFu17i) C1{ Fi:7 Fs Fi:17}



static void Test_BFu7i_Us_BFu17i()
{
  {
    init_simple_test("BFu7i_Us_BFu17i");
    static STRUCT_IF_C BFu7i_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu17i, BFu7i_Us_BFu17i)
//============================================================================


struct  BFu7i_Us_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Us_BFu17ll) C1{ Fi:7 Fs FL:17}



static void Test_BFu7i_Us_BFu17ll()
{
  {
    init_simple_test("BFu7i_Us_BFu17ll");
    static STRUCT_IF_C BFu7i_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu17ll, BFu7i_Us_BFu17ll)
//============================================================================


struct  BFu7i_Us_BFu1c  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Us_BFu1c) C1{ Fi:7 Fs Fc:1}



static void Test_BFu7i_Us_BFu1c()
{
  {
    init_simple_test("BFu7i_Us_BFu1c");
    static STRUCT_IF_C BFu7i_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu1c, BFu7i_Us_BFu1c)
//============================================================================


struct  BFu7i_Us_BFu1i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Us_BFu1i) C1{ Fi:7 Fs Fi:1}



static void Test_BFu7i_Us_BFu1i()
{
  {
    init_simple_test("BFu7i_Us_BFu1i");
    static STRUCT_IF_C BFu7i_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu1i, BFu7i_Us_BFu1i)
//============================================================================


struct  BFu7i_Us_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Us_BFu1ll) C1{ Fi:7 Fs FL:1}



static void Test_BFu7i_Us_BFu1ll()
{
  {
    init_simple_test("BFu7i_Us_BFu1ll");
    static STRUCT_IF_C BFu7i_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu1ll, BFu7i_Us_BFu1ll)
//============================================================================


struct  BFu7i_Us_BFu1s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Us_BFu1s) C1{ Fi:7 Fs Fs:1}



static void Test_BFu7i_Us_BFu1s()
{
  {
    init_simple_test("BFu7i_Us_BFu1s");
    static STRUCT_IF_C BFu7i_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu1s, BFu7i_Us_BFu1s)
//============================================================================


struct  BFu7i_Us_BFu31i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Us_BFu31i) C1{ Fi:7 Fs Fi:31}



static void Test_BFu7i_Us_BFu31i()
{
  {
    init_simple_test("BFu7i_Us_BFu31i");
    static STRUCT_IF_C BFu7i_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu31i, BFu7i_Us_BFu31i)
//============================================================================


struct  BFu7i_Us_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Us_BFu31ll) C1{ Fi:7 Fs FL:31}



static void Test_BFu7i_Us_BFu31ll()
{
  {
    init_simple_test("BFu7i_Us_BFu31ll");
    static STRUCT_IF_C BFu7i_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu31ll, BFu7i_Us_BFu31ll)
//============================================================================


struct  BFu7i_Us_BFu32i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Us_BFu32i) C1{ Fi:7 Fs Fi:32}



static void Test_BFu7i_Us_BFu32i()
{
  {
    init_simple_test("BFu7i_Us_BFu32i");
    static STRUCT_IF_C BFu7i_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu32i, BFu7i_Us_BFu32i)
//============================================================================


struct  BFu7i_Us_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Us_BFu32ll) C1{ Fi:7 Fs FL:32}



static void Test_BFu7i_Us_BFu32ll()
{
  {
    init_simple_test("BFu7i_Us_BFu32ll");
    static STRUCT_IF_C BFu7i_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu32ll, BFu7i_Us_BFu32ll)
//============================================================================


struct  BFu7i_Us_BFu33  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Us_BFu33) C1{ Fi:7 Fs FL:33}



static void Test_BFu7i_Us_BFu33()
{
  {
    init_simple_test("BFu7i_Us_BFu33");
    static STRUCT_IF_C BFu7i_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7i_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7i_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu33, BFu7i_Us_BFu33)
//============================================================================


struct  BFu7i_Us_BFu7c  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Us_BFu7c) C1{ Fi:7 Fs Fc:7}



static void Test_BFu7i_Us_BFu7c()
{
  {
    init_simple_test("BFu7i_Us_BFu7c");
    static STRUCT_IF_C BFu7i_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu7c, BFu7i_Us_BFu7c)
//============================================================================


struct  BFu7i_Us_BFu7i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Us_BFu7i) C1{ Fi:7 Fs Fi:7}



static void Test_BFu7i_Us_BFu7i()
{
  {
    init_simple_test("BFu7i_Us_BFu7i");
    static STRUCT_IF_C BFu7i_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu7i, BFu7i_Us_BFu7i)
//============================================================================


struct  BFu7i_Us_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Us_BFu7ll) C1{ Fi:7 Fs FL:7}



static void Test_BFu7i_Us_BFu7ll()
{
  {
    init_simple_test("BFu7i_Us_BFu7ll");
    static STRUCT_IF_C BFu7i_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu7ll, BFu7i_Us_BFu7ll)
//============================================================================


struct  BFu7i_Us_BFu7s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Us_BFu7s) C1{ Fi:7 Fs Fs:7}



static void Test_BFu7i_Us_BFu7s()
{
  {
    init_simple_test("BFu7i_Us_BFu7s");
    static STRUCT_IF_C BFu7i_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu7s, BFu7i_Us_BFu7s)
//============================================================================


struct  BFu7i_Us_BFu8c  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Us_BFu8c) C1{ Fi:7 Fs Fc:8}



static void Test_BFu7i_Us_BFu8c()
{
  {
    init_simple_test("BFu7i_Us_BFu8c");
    static STRUCT_IF_C BFu7i_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu8c, BFu7i_Us_BFu8c)
//============================================================================


struct  BFu7i_Us_BFu8i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Us_BFu8i) C1{ Fi:7 Fs Fi:8}



static void Test_BFu7i_Us_BFu8i()
{
  {
    init_simple_test("BFu7i_Us_BFu8i");
    static STRUCT_IF_C BFu7i_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu8i, BFu7i_Us_BFu8i)
//============================================================================


struct  BFu7i_Us_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Us_BFu8ll) C1{ Fi:7 Fs FL:8}



static void Test_BFu7i_Us_BFu8ll()
{
  {
    init_simple_test("BFu7i_Us_BFu8ll");
    static STRUCT_IF_C BFu7i_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu8ll, BFu7i_Us_BFu8ll)
//============================================================================


struct  BFu7i_Us_BFu8s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Us_BFu8s) C1{ Fi:7 Fs Fs:8}



static void Test_BFu7i_Us_BFu8s()
{
  {
    init_simple_test("BFu7i_Us_BFu8s");
    static STRUCT_IF_C BFu7i_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu8s, BFu7i_Us_BFu8s)
//============================================================================


struct  BFu7i_Us_BFu9i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Us_BFu9i) C1{ Fi:7 Fs Fi:9}



static void Test_BFu7i_Us_BFu9i()
{
  {
    init_simple_test("BFu7i_Us_BFu9i");
    static STRUCT_IF_C BFu7i_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu9i, BFu7i_Us_BFu9i)
//============================================================================


struct  BFu7i_Us_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Us_BFu9ll) C1{ Fi:7 Fs FL:9}



static void Test_BFu7i_Us_BFu9ll()
{
  {
    init_simple_test("BFu7i_Us_BFu9ll");
    static STRUCT_IF_C BFu7i_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu9ll, BFu7i_Us_BFu9ll)
//============================================================================


struct  BFu7i_Us_BFu9s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Us_BFu9s) C1{ Fi:7 Fs Fs:9}



static void Test_BFu7i_Us_BFu9s()
{
  {
    init_simple_test("BFu7i_Us_BFu9s");
    static STRUCT_IF_C BFu7i_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_BFu9s, BFu7i_Us_BFu9s)
//============================================================================


struct  BFu7i_Us_C  {
  unsigned int v1:7;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu7i_Us_C) C1{ Fi:7 Fs Fc}



static void Test_BFu7i_Us_C()
{
  {
    init_simple_test("BFu7i_Us_C");
    static STRUCT_IF_C BFu7i_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_C");
    check_field_offset(lv, v2, 2, "BFu7i_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_C, BFu7i_Us_C)
//============================================================================


struct  BFu7i_Us_D  {
  unsigned int v1:7;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu7i_Us_D) C1{ Fi:7 Fs FL}



static void Test_BFu7i_Us_D()
{
  {
    init_simple_test("BFu7i_Us_D");
    static STRUCT_IF_C BFu7i_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_D");
    check_field_offset(lv, v2, 2, "BFu7i_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_D, BFu7i_Us_D)
//============================================================================


struct  BFu7i_Us_F  {
  unsigned int v1:7;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu7i_Us_F) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_Us_F()
{
  {
    init_simple_test("BFu7i_Us_F");
    static STRUCT_IF_C BFu7i_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_F");
    check_field_offset(lv, v2, 2, "BFu7i_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_F, BFu7i_Us_F)
//============================================================================


struct  BFu7i_Us_I  {
  unsigned int v1:7;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu7i_Us_I) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_Us_I()
{
  {
    init_simple_test("BFu7i_Us_I");
    static STRUCT_IF_C BFu7i_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_I");
    check_field_offset(lv, v2, 2, "BFu7i_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_I, BFu7i_Us_I)
//============================================================================


struct  BFu7i_Us_Ip  {
  unsigned int v1:7;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu7i_Us_Ip) C1{ Fi:7 Fs Fp}



static void Test_BFu7i_Us_Ip()
{
  {
    init_simple_test("BFu7i_Us_Ip");
    static STRUCT_IF_C BFu7i_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Ip, BFu7i_Us_Ip)
//============================================================================


struct  BFu7i_Us_L  {
  unsigned int v1:7;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Us_L) C1{ Fi:7 Fs FL}



static void Test_BFu7i_Us_L()
{
  {
    init_simple_test("BFu7i_Us_L");
    static STRUCT_IF_C BFu7i_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_L");
    check_field_offset(lv, v2, 2, "BFu7i_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_L, BFu7i_Us_L)
//============================================================================


struct  BFu7i_Us_S  {
  unsigned int v1:7;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu7i_Us_S) C1{ Fi:7 Fs[2]}



static void Test_BFu7i_Us_S()
{
  {
    init_simple_test("BFu7i_Us_S");
    static STRUCT_IF_C BFu7i_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_S");
    check_field_offset(lv, v2, 2, "BFu7i_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_S, BFu7i_Us_S)
//============================================================================


struct  BFu7i_Us_Uc  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Us_Uc) C1{ Fi:7 Fs Fc}



static void Test_BFu7i_Us_Uc()
{
  {
    init_simple_test("BFu7i_Us_Uc");
    static STRUCT_IF_C BFu7i_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Uc, BFu7i_Us_Uc)
//============================================================================


struct  BFu7i_Us_Ui  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Us_Ui) C1{ Fi:7 Fs Fi}



static void Test_BFu7i_Us_Ui()
{
  {
    init_simple_test("BFu7i_Us_Ui");
    static STRUCT_IF_C BFu7i_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Ui, BFu7i_Us_Ui)
//============================================================================


struct  BFu7i_Us_Ul  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Us_Ul) C1{ Fi:7 Fs FL}



static void Test_BFu7i_Us_Ul()
{
  {
    init_simple_test("BFu7i_Us_Ul");
    static STRUCT_IF_C BFu7i_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Ul, BFu7i_Us_Ul)
//============================================================================


struct  BFu7i_Us_Us  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Us_Us) C1{ Fi:7 Fs[2]}



static void Test_BFu7i_Us_Us()
{
  {
    init_simple_test("BFu7i_Us_Us");
    static STRUCT_IF_C BFu7i_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Us_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Us");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7i_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Us, BFu7i_Us_Us)
//============================================================================


struct  BFu7i_Us_Vp  {
  unsigned int v1:7;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu7i_Us_Vp) C1{ Fi:7 Fs Fp}



static void Test_BFu7i_Us_Vp()
{
  {
    init_simple_test("BFu7i_Us_Vp");
    static STRUCT_IF_C BFu7i_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu7i_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Us_Vp, BFu7i_Us_Vp)
//============================================================================


struct  BFu7i_Vp  {
  unsigned int v1:7;
  void *v2;
};
//SIG(1 BFu7i_Vp) C1{ Fi:7 Fp}



static void Test_BFu7i_Vp()
{
  {
    init_simple_test("BFu7i_Vp");
    static STRUCT_IF_C BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp, BFu7i_Vp)
//============================================================================


struct  BFu7i_Vp_BFu15i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7i_Vp_BFu15i) C1{ Fi:7 Fp Fi:15}



static void Test_BFu7i_Vp_BFu15i()
{
  {
    init_simple_test("BFu7i_Vp_BFu15i");
    static STRUCT_IF_C BFu7i_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu15i, BFu7i_Vp_BFu15i)
//============================================================================


struct  BFu7i_Vp_BFu15ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_Vp_BFu15ll) C1{ Fi:7 Fp FL:15}



static void Test_BFu7i_Vp_BFu15ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu15ll");
    static STRUCT_IF_C BFu7i_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu15ll, BFu7i_Vp_BFu15ll)
//============================================================================


struct  BFu7i_Vp_BFu15s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7i_Vp_BFu15s) C1{ Fi:7 Fp Fs:15}



static void Test_BFu7i_Vp_BFu15s()
{
  {
    init_simple_test("BFu7i_Vp_BFu15s");
    static STRUCT_IF_C BFu7i_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7i_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7i_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu15s, BFu7i_Vp_BFu15s)
//============================================================================


struct  BFu7i_Vp_BFu16i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7i_Vp_BFu16i) C1{ Fi:7 Fp Fi:16}



static void Test_BFu7i_Vp_BFu16i()
{
  {
    init_simple_test("BFu7i_Vp_BFu16i");
    static STRUCT_IF_C BFu7i_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu16i, BFu7i_Vp_BFu16i)
//============================================================================


struct  BFu7i_Vp_BFu16ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_Vp_BFu16ll) C1{ Fi:7 Fp FL:16}



static void Test_BFu7i_Vp_BFu16ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu16ll");
    static STRUCT_IF_C BFu7i_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu16ll, BFu7i_Vp_BFu16ll)
//============================================================================


struct  BFu7i_Vp_BFu16s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7i_Vp_BFu16s) C1{ Fi:7 Fp Fs:16}



static void Test_BFu7i_Vp_BFu16s()
{
  {
    init_simple_test("BFu7i_Vp_BFu16s");
    static STRUCT_IF_C BFu7i_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7i_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7i_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu16s, BFu7i_Vp_BFu16s)
//============================================================================


struct  BFu7i_Vp_BFu17i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7i_Vp_BFu17i) C1{ Fi:7 Fp Fi:17}



static void Test_BFu7i_Vp_BFu17i()
{
  {
    init_simple_test("BFu7i_Vp_BFu17i");
    static STRUCT_IF_C BFu7i_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7i_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7i_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu17i, BFu7i_Vp_BFu17i)
//============================================================================


struct  BFu7i_Vp_BFu17ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_Vp_BFu17ll) C1{ Fi:7 Fp FL:17}



static void Test_BFu7i_Vp_BFu17ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu17ll");
    static STRUCT_IF_C BFu7i_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7i_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7i_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu17ll, BFu7i_Vp_BFu17ll)
//============================================================================


struct  BFu7i_Vp_BFu1c  {
  unsigned int v1:7;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7i_Vp_BFu1c) C1{ Fi:7 Fp Fc:1}



static void Test_BFu7i_Vp_BFu1c()
{
  {
    init_simple_test("BFu7i_Vp_BFu1c");
    static STRUCT_IF_C BFu7i_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu1c, BFu7i_Vp_BFu1c)
//============================================================================


struct  BFu7i_Vp_BFu1i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7i_Vp_BFu1i) C1{ Fi:7 Fp Fi:1}



static void Test_BFu7i_Vp_BFu1i()
{
  {
    init_simple_test("BFu7i_Vp_BFu1i");
    static STRUCT_IF_C BFu7i_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu1i, BFu7i_Vp_BFu1i)
//============================================================================


struct  BFu7i_Vp_BFu1ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_Vp_BFu1ll) C1{ Fi:7 Fp FL:1}



static void Test_BFu7i_Vp_BFu1ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu1ll");
    static STRUCT_IF_C BFu7i_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu1ll, BFu7i_Vp_BFu1ll)
//============================================================================


struct  BFu7i_Vp_BFu1s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7i_Vp_BFu1s) C1{ Fi:7 Fp Fs:1}



static void Test_BFu7i_Vp_BFu1s()
{
  {
    init_simple_test("BFu7i_Vp_BFu1s");
    static STRUCT_IF_C BFu7i_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7i_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu1s, BFu7i_Vp_BFu1s)
//============================================================================


struct  BFu7i_Vp_BFu31i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7i_Vp_BFu31i) C1{ Fi:7 Fp Fi:31}



static void Test_BFu7i_Vp_BFu31i()
{
  {
    init_simple_test("BFu7i_Vp_BFu31i");
    static STRUCT_IF_C BFu7i_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7i_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7i_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu31i, BFu7i_Vp_BFu31i)
//============================================================================


struct  BFu7i_Vp_BFu31ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_Vp_BFu31ll) C1{ Fi:7 Fp FL:31}



static void Test_BFu7i_Vp_BFu31ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu31ll");
    static STRUCT_IF_C BFu7i_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7i_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7i_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu31ll, BFu7i_Vp_BFu31ll)
//============================================================================


struct  BFu7i_Vp_BFu32i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7i_Vp_BFu32i) C1{ Fi:7 Fp Fi:32}



static void Test_BFu7i_Vp_BFu32i()
{
  {
    init_simple_test("BFu7i_Vp_BFu32i");
    static STRUCT_IF_C BFu7i_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7i_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7i_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu32i, BFu7i_Vp_BFu32i)
//============================================================================


struct  BFu7i_Vp_BFu32ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_Vp_BFu32ll) C1{ Fi:7 Fp FL:32}



static void Test_BFu7i_Vp_BFu32ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu32ll");
    static STRUCT_IF_C BFu7i_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7i_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7i_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu32ll, BFu7i_Vp_BFu32ll)
//============================================================================


struct  BFu7i_Vp_BFu33  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_Vp_BFu33) C1{ Fi:7 Fp FL:33}



static void Test_BFu7i_Vp_BFu33()
{
  {
    init_simple_test("BFu7i_Vp_BFu33");
    static STRUCT_IF_C BFu7i_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7i_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7i_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu33, BFu7i_Vp_BFu33)
//============================================================================


struct  BFu7i_Vp_BFu7c  {
  unsigned int v1:7;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7i_Vp_BFu7c) C1{ Fi:7 Fp Fc:7}



static void Test_BFu7i_Vp_BFu7c()
{
  {
    init_simple_test("BFu7i_Vp_BFu7c");
    static STRUCT_IF_C BFu7i_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu7c, BFu7i_Vp_BFu7c)
//============================================================================


struct  BFu7i_Vp_BFu7i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7i_Vp_BFu7i) C1{ Fi:7 Fp Fi:7}



static void Test_BFu7i_Vp_BFu7i()
{
  {
    init_simple_test("BFu7i_Vp_BFu7i");
    static STRUCT_IF_C BFu7i_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu7i, BFu7i_Vp_BFu7i)
//============================================================================


struct  BFu7i_Vp_BFu7ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_Vp_BFu7ll) C1{ Fi:7 Fp FL:7}



static void Test_BFu7i_Vp_BFu7ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu7ll");
    static STRUCT_IF_C BFu7i_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu7ll, BFu7i_Vp_BFu7ll)
//============================================================================


struct  BFu7i_Vp_BFu7s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7i_Vp_BFu7s) C1{ Fi:7 Fp Fs:7}



static void Test_BFu7i_Vp_BFu7s()
{
  {
    init_simple_test("BFu7i_Vp_BFu7s");
    static STRUCT_IF_C BFu7i_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7i_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu7s, BFu7i_Vp_BFu7s)
//============================================================================


struct  BFu7i_Vp_BFu8c  {
  unsigned int v1:7;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7i_Vp_BFu8c) C1{ Fi:7 Fp Fc:8}



static void Test_BFu7i_Vp_BFu8c()
{
  {
    init_simple_test("BFu7i_Vp_BFu8c");
    static STRUCT_IF_C BFu7i_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu8c, BFu7i_Vp_BFu8c)
//============================================================================


struct  BFu7i_Vp_BFu8i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7i_Vp_BFu8i) C1{ Fi:7 Fp Fi:8}



static void Test_BFu7i_Vp_BFu8i()
{
  {
    init_simple_test("BFu7i_Vp_BFu8i");
    static STRUCT_IF_C BFu7i_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu8i, BFu7i_Vp_BFu8i)
//============================================================================


struct  BFu7i_Vp_BFu8ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_Vp_BFu8ll) C1{ Fi:7 Fp FL:8}



static void Test_BFu7i_Vp_BFu8ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu8ll");
    static STRUCT_IF_C BFu7i_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu8ll, BFu7i_Vp_BFu8ll)
//============================================================================


struct  BFu7i_Vp_BFu8s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7i_Vp_BFu8s) C1{ Fi:7 Fp Fs:8}



static void Test_BFu7i_Vp_BFu8s()
{
  {
    init_simple_test("BFu7i_Vp_BFu8s");
    static STRUCT_IF_C BFu7i_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7i_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7i_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu8s, BFu7i_Vp_BFu8s)
//============================================================================


struct  BFu7i_Vp_BFu9i  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7i_Vp_BFu9i) C1{ Fi:7 Fp Fi:9}



static void Test_BFu7i_Vp_BFu9i()
{
  {
    init_simple_test("BFu7i_Vp_BFu9i");
    static STRUCT_IF_C BFu7i_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu9i, BFu7i_Vp_BFu9i)
//============================================================================


struct  BFu7i_Vp_BFu9ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_Vp_BFu9ll) C1{ Fi:7 Fp FL:9}



static void Test_BFu7i_Vp_BFu9ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu9ll");
    static STRUCT_IF_C BFu7i_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu9ll, BFu7i_Vp_BFu9ll)
//============================================================================


struct  BFu7i_Vp_BFu9s  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7i_Vp_BFu9s) C1{ Fi:7 Fp Fs:9}



static void Test_BFu7i_Vp_BFu9s()
{
  {
    init_simple_test("BFu7i_Vp_BFu9s");
    static STRUCT_IF_C BFu7i_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7i_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7i_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_BFu9s, BFu7i_Vp_BFu9s)
//============================================================================


struct  BFu7i_Vp_C  {
  unsigned int v1:7;
  void *v2;
  char v3;
};
//SIG(1 BFu7i_Vp_C) C1{ Fi:7 Fp Fc}



static void Test_BFu7i_Vp_C()
{
  {
    init_simple_test("BFu7i_Vp_C");
    static STRUCT_IF_C BFu7i_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_C, BFu7i_Vp_C)
//============================================================================


struct  BFu7i_Vp_D  {
  unsigned int v1:7;
  void *v2;
  double v3;
};
//SIG(1 BFu7i_Vp_D) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Vp_D()
{
  {
    init_simple_test("BFu7i_Vp_D");
    static STRUCT_IF_C BFu7i_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_D, BFu7i_Vp_D)
//============================================================================


struct  BFu7i_Vp_F  {
  unsigned int v1:7;
  void *v2;
  float v3;
};
//SIG(1 BFu7i_Vp_F) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Vp_F()
{
  {
    init_simple_test("BFu7i_Vp_F");
    static STRUCT_IF_C BFu7i_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_F, BFu7i_Vp_F)
//============================================================================


struct  BFu7i_Vp_I  {
  unsigned int v1:7;
  void *v2;
  int v3;
};
//SIG(1 BFu7i_Vp_I) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Vp_I()
{
  {
    init_simple_test("BFu7i_Vp_I");
    static STRUCT_IF_C BFu7i_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_I, BFu7i_Vp_I)
//============================================================================


struct  BFu7i_Vp_Ip  {
  unsigned int v1:7;
  void *v2;
  int *v3;
};
//SIG(1 BFu7i_Vp_Ip) C1{ Fi:7 Fp[2]}



static void Test_BFu7i_Vp_Ip()
{
  {
    init_simple_test("BFu7i_Vp_Ip");
    static STRUCT_IF_C BFu7i_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Ip, BFu7i_Vp_Ip)
//============================================================================


struct  BFu7i_Vp_L  {
  unsigned int v1:7;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu7i_Vp_L) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Vp_L()
{
  {
    init_simple_test("BFu7i_Vp_L");
    static STRUCT_IF_C BFu7i_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_L, BFu7i_Vp_L)
//============================================================================


struct  BFu7i_Vp_S  {
  unsigned int v1:7;
  void *v2;
  short v3;
};
//SIG(1 BFu7i_Vp_S) C1{ Fi:7 Fp Fs}



static void Test_BFu7i_Vp_S()
{
  {
    init_simple_test("BFu7i_Vp_S");
    static STRUCT_IF_C BFu7i_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_S, BFu7i_Vp_S)
//============================================================================


struct  BFu7i_Vp_Uc  {
  unsigned int v1:7;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu7i_Vp_Uc) C1{ Fi:7 Fp Fc}



static void Test_BFu7i_Vp_Uc()
{
  {
    init_simple_test("BFu7i_Vp_Uc");
    static STRUCT_IF_C BFu7i_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Uc, BFu7i_Vp_Uc)
//============================================================================


struct  BFu7i_Vp_Ui  {
  unsigned int v1:7;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu7i_Vp_Ui) C1{ Fi:7 Fp Fi}



static void Test_BFu7i_Vp_Ui()
{
  {
    init_simple_test("BFu7i_Vp_Ui");
    static STRUCT_IF_C BFu7i_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Ui, BFu7i_Vp_Ui)
//============================================================================


struct  BFu7i_Vp_Ul  {
  unsigned int v1:7;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu7i_Vp_Ul) C1{ Fi:7 Fp FL}



static void Test_BFu7i_Vp_Ul()
{
  {
    init_simple_test("BFu7i_Vp_Ul");
    static STRUCT_IF_C BFu7i_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7i_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Ul, BFu7i_Vp_Ul)
//============================================================================


struct  BFu7i_Vp_Us  {
  unsigned int v1:7;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu7i_Vp_Us) C1{ Fi:7 Fp Fs}



static void Test_BFu7i_Vp_Us()
{
  {
    init_simple_test("BFu7i_Vp_Us");
    static STRUCT_IF_C BFu7i_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Us, BFu7i_Vp_Us)
//============================================================================


struct  BFu7i_Vp_Vp  {
  unsigned int v1:7;
  void *v2;
  void *v3;
};
//SIG(1 BFu7i_Vp_Vp) C1{ Fi:7 Fp[2]}



static void Test_BFu7i_Vp_Vp()
{
  {
    init_simple_test("BFu7i_Vp_Vp");
    static STRUCT_IF_C BFu7i_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7i_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7i_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_Vp_Vp, BFu7i_Vp_Vp)
//============================================================================


struct  BFu7ll  {
  __tsu64 v1:7;
};
//SIG(1 BFu7ll) C1{ FL:7}



static void Test_BFu7ll()
{
  {
    init_simple_test("BFu7ll");
    static STRUCT_IF_C BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll, BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
};
//SIG(1 BFu7ll_BFs7c) C1{ FL:7 Fc:7}



static void Test_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c, BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c, BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFs7c, BFu7ll_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFs7i, BFu7ll_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFs7ll, BFu7ll_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFs7s, BFu7ll_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFu7c, BFu7ll_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFu7i, BFu7ll_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFu7ll, BFu7ll_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7c_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7c_BFu7s, BFu7ll_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i, BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFs7c, BFu7ll_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFs7i, BFu7ll_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFs7ll, BFu7ll_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFs7s, BFu7ll_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFu7c, BFu7ll_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFu7i, BFu7ll_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFu7ll, BFu7ll_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7i_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7i_BFu7s, BFu7ll_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll, BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFs7c, BFu7ll_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFs7i, BFu7ll_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFs7ll, BFu7ll_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFs7s, BFu7ll_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFu7c, BFu7ll_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFu7i, BFu7ll_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFu7ll, BFu7ll_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7ll_BFu7s, BFu7ll_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s, BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFs7c, BFu7ll_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFs7i, BFu7ll_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFs7ll, BFu7ll_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFs7s, BFu7ll_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFu7c, BFu7ll_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFu7i, BFu7ll_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFu7ll, BFu7ll_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFs7s_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFs7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFs7s_BFu7s, BFu7ll_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c, BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFs7c, BFu7ll_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFs7i, BFu7ll_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFs7ll, BFu7ll_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFs7s, BFu7ll_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFu7c, BFu7ll_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFu7i, BFu7ll_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFu7ll, BFu7ll_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7c_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7c_BFu7s, BFu7ll_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i, BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFs7c, BFu7ll_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFs7i, BFu7ll_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFs7ll, BFu7ll_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFs7s, BFu7ll_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFu7c, BFu7ll_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFu7i, BFu7ll_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFu7ll, BFu7ll_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7i_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7i_BFu7s, BFu7ll_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll, BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFs7c, BFu7ll_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFs7i, BFu7ll_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFs7ll, BFu7ll_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFs7s, BFu7ll_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFu7c, BFu7ll_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFu7i, BFu7ll_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFu7ll, BFu7ll_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7ll_BFu7s, BFu7ll_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s, BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFs7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFs7c, BFu7ll_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFs7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFs7i, BFu7ll_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFs7ll, BFu7ll_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFs7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFs7s, BFu7ll_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFu7c  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFu7c, BFu7ll_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFu7i  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFu7i, BFu7ll_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFu7ll, BFu7ll_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7c_BFu7s_BFu7s  {
  __tsu64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7c_BFu7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7c_BFu7s_BFu7s, BFu7ll_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
};
//SIG(1 BFu7ll_BFs7i) C1{ FL:7 Fi:7}



static void Test_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i, BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c, BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFs7c, BFu7ll_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFs7i, BFu7ll_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFs7ll, BFu7ll_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFs7s, BFu7ll_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFu7c, BFu7ll_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFu7i, BFu7ll_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFu7ll, BFu7ll_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7c_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7c_BFu7s, BFu7ll_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i, BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFs7c, BFu7ll_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFs7i, BFu7ll_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFs7ll, BFu7ll_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFs7s, BFu7ll_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFu7c, BFu7ll_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFu7i, BFu7ll_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFu7ll, BFu7ll_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7i_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7i_BFu7s, BFu7ll_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll, BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFs7c, BFu7ll_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFs7i, BFu7ll_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFs7ll, BFu7ll_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFs7s, BFu7ll_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFu7c, BFu7ll_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFu7i, BFu7ll_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFu7ll, BFu7ll_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7ll_BFu7s, BFu7ll_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s, BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFs7c, BFu7ll_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFs7i, BFu7ll_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFs7ll, BFu7ll_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFs7s, BFu7ll_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFu7c, BFu7ll_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFu7i, BFu7ll_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFu7ll, BFu7ll_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFs7s_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFs7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFs7s_BFu7s, BFu7ll_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c, BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFs7c, BFu7ll_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFs7i, BFu7ll_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFs7ll, BFu7ll_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFs7s, BFu7ll_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFu7c, BFu7ll_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFu7i, BFu7ll_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFu7ll, BFu7ll_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7c_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7c_BFu7s, BFu7ll_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i, BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFs7c, BFu7ll_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFs7i, BFu7ll_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFs7ll, BFu7ll_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFs7s, BFu7ll_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFu7c, BFu7ll_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFu7i, BFu7ll_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFu7ll, BFu7ll_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7i_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7i_BFu7s, BFu7ll_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll, BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFs7c, BFu7ll_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFs7i, BFu7ll_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFs7ll, BFu7ll_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFs7s, BFu7ll_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFu7c, BFu7ll_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFu7i, BFu7ll_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFu7ll, BFu7ll_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7ll_BFu7s, BFu7ll_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s, BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFs7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFs7c, BFu7ll_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFs7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFs7i, BFu7ll_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFs7ll, BFu7ll_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFs7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFs7s, BFu7ll_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFu7c  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFu7c, BFu7ll_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFu7i  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFu7i, BFu7ll_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFu7ll, BFu7ll_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7i_BFu7s_BFu7s  {
  __tsu64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7i_BFu7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7i_BFu7s_BFu7s, BFu7ll_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFu7ll_BFs7ll) C1{ FL:7 FL:7}



static void Test_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll, BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c, BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFs7c, BFu7ll_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFs7i, BFu7ll_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFs7ll, BFu7ll_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFs7s, BFu7ll_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFu7c, BFu7ll_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFu7i, BFu7ll_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFu7ll, BFu7ll_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7c_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7c_BFu7s, BFu7ll_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i, BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFs7c, BFu7ll_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFs7i, BFu7ll_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFs7ll, BFu7ll_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFs7s, BFu7ll_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFu7c, BFu7ll_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFu7i, BFu7ll_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFu7ll, BFu7ll_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7i_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7i_BFu7s, BFu7ll_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll, BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFs7c, BFu7ll_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFs7i, BFu7ll_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFs7ll, BFu7ll_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFs7s, BFu7ll_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFu7c, BFu7ll_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFu7i, BFu7ll_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFu7ll, BFu7ll_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7ll_BFu7s, BFu7ll_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s, BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFs7c, BFu7ll_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFs7i, BFu7ll_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFs7ll, BFu7ll_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFs7s, BFu7ll_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFu7c, BFu7ll_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFu7i, BFu7ll_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFu7ll, BFu7ll_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFs7s_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFs7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFs7s_BFu7s, BFu7ll_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c, BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFs7c, BFu7ll_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFs7i, BFu7ll_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFs7ll, BFu7ll_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFs7s, BFu7ll_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFu7c, BFu7ll_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFu7i, BFu7ll_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFu7ll, BFu7ll_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7c_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7c_BFu7s, BFu7ll_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i, BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFs7c, BFu7ll_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFs7i, BFu7ll_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFs7ll, BFu7ll_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFs7s, BFu7ll_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFu7c, BFu7ll_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFu7i, BFu7ll_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFu7ll, BFu7ll_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7i_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7i_BFu7s, BFu7ll_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll, BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFs7c, BFu7ll_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFs7i, BFu7ll_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFs7ll, BFu7ll_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFs7s, BFu7ll_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFu7c, BFu7ll_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFu7i, BFu7ll_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFu7ll, BFu7ll_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7ll_BFu7s, BFu7ll_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s, BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFs7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFs7c, BFu7ll_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFs7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFs7i, BFu7ll_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFs7ll, BFu7ll_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFs7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFs7s, BFu7ll_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFu7c  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFu7c, BFu7ll_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFu7i  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFu7i, BFu7ll_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFu7ll, BFu7ll_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7ll_BFu7s_BFu7s  {
  __tsu64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7ll_BFu7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7ll_BFu7s_BFu7s, BFu7ll_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
};
//SIG(1 BFu7ll_BFs7s) C1{ FL:7 Fs:7}



static void Test_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s, BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c, BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFs7c, BFu7ll_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFs7i, BFu7ll_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFs7ll, BFu7ll_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFs7s, BFu7ll_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFu7c, BFu7ll_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFu7i, BFu7ll_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFu7ll, BFu7ll_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7c_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7c_BFu7s, BFu7ll_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i, BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFs7c, BFu7ll_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFs7i, BFu7ll_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFs7ll, BFu7ll_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFs7s, BFu7ll_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFu7c, BFu7ll_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFu7i, BFu7ll_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFu7ll, BFu7ll_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7i_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7i_BFu7s, BFu7ll_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll, BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFs7c, BFu7ll_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFs7i, BFu7ll_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFs7ll, BFu7ll_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFs7s, BFu7ll_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFu7c, BFu7ll_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFu7i, BFu7ll_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFu7ll, BFu7ll_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7ll_BFu7s, BFu7ll_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s, BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFs7c, BFu7ll_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFs7i, BFu7ll_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFs7ll, BFu7ll_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFs7s, BFu7ll_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFu7c, BFu7ll_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFu7i, BFu7ll_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFu7ll, BFu7ll_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFs7s_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFs7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFs7s_BFu7s, BFu7ll_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c, BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFs7c, BFu7ll_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFs7i, BFu7ll_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFs7ll, BFu7ll_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFs7s, BFu7ll_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFu7c, BFu7ll_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFu7i, BFu7ll_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFu7ll, BFu7ll_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7c_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7c_BFu7s, BFu7ll_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i, BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFs7c, BFu7ll_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFs7i, BFu7ll_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFs7ll, BFu7ll_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFs7s, BFu7ll_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFu7c, BFu7ll_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFu7i, BFu7ll_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFu7ll, BFu7ll_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7i_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7i_BFu7s, BFu7ll_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll, BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFs7c, BFu7ll_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFs7i, BFu7ll_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFs7ll, BFu7ll_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFs7s, BFu7ll_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFu7c, BFu7ll_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFu7i, BFu7ll_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFu7ll, BFu7ll_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7ll_BFu7s, BFu7ll_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s, BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFs7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFs7c, BFu7ll_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFs7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFs7i, BFu7ll_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFs7ll, BFu7ll_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFs7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFs7s, BFu7ll_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFu7c  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFu7c, BFu7ll_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFu7i  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFu7i, BFu7ll_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFu7ll, BFu7ll_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFs7s_BFu7s_BFu7s  {
  __tsu64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFs7s_BFu7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFs7s_BFu7s_BFu7s, BFu7ll_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu7ll_BFu15i) C1{ FL:7 Fi:15}



static void Test_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i, BFu7ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu15i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu15i_BFu15i) C1{ FL:7 Fi:15 Fi:15}



static void Test_BFu7ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu15i, BFu7ll_BFu15i_BFu15i)
//============================================================================


struct  BFu7ll_BFu15i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu15i_BFu15ll) C1{ FL:7 Fi:15 FL:15}



static void Test_BFu7ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu15ll, BFu7ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu15i_BFu15s) C1{ FL:7 Fi:15 Fs:15}



static void Test_BFu7ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu15s, BFu7ll_BFu15i_BFu15s)
//============================================================================


struct  BFu7ll_BFu15i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu15i_BFu16i) C1{ FL:7 Fi:15 Fi:16}



static void Test_BFu7ll_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu16i, BFu7ll_BFu15i_BFu16i)
//============================================================================


struct  BFu7ll_BFu15i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu15i_BFu16ll) C1{ FL:7 Fi:15 FL:16}



static void Test_BFu7ll_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu16ll, BFu7ll_BFu15i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu15i_BFu16s) C1{ FL:7 Fi:15 Fs:16}



static void Test_BFu7ll_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu16s, BFu7ll_BFu15i_BFu16s)
//============================================================================


struct  BFu7ll_BFu15i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu15i_BFu17i) C1{ FL:7 Fi:15 Fi:17}



static void Test_BFu7ll_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu17i, BFu7ll_BFu15i_BFu17i)
//============================================================================


struct  BFu7ll_BFu15i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu15i_BFu17ll) C1{ FL:7 Fi:15 FL:17}



static void Test_BFu7ll_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu17ll, BFu7ll_BFu15i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu15i_BFu1c) C1{ FL:7 Fi:15 Fc:1}



static void Test_BFu7ll_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu1c, BFu7ll_BFu15i_BFu1c)
//============================================================================


struct  BFu7ll_BFu15i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu15i_BFu1i) C1{ FL:7 Fi:15 Fi:1}



static void Test_BFu7ll_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu1i, BFu7ll_BFu15i_BFu1i)
//============================================================================


struct  BFu7ll_BFu15i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu15i_BFu1ll) C1{ FL:7 Fi:15 FL:1}



static void Test_BFu7ll_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu1ll, BFu7ll_BFu15i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu15i_BFu1s) C1{ FL:7 Fi:15 Fs:1}



static void Test_BFu7ll_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu1s, BFu7ll_BFu15i_BFu1s)
//============================================================================


struct  BFu7ll_BFu15i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu15i_BFu31i) C1{ FL:7 Fi:15 Fi:31}



static void Test_BFu7ll_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu31i, BFu7ll_BFu15i_BFu31i)
//============================================================================


struct  BFu7ll_BFu15i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu15i_BFu31ll) C1{ FL:7 Fi:15 FL:31}



static void Test_BFu7ll_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7ll_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu31ll, BFu7ll_BFu15i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu15i_BFu32i) C1{ FL:7 Fi:15 Fi:32}



static void Test_BFu7ll_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu32i, BFu7ll_BFu15i_BFu32i)
//============================================================================


struct  BFu7ll_BFu15i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu15i_BFu32ll) C1{ FL:7 Fi:15 FL:32}



static void Test_BFu7ll_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7ll_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu32ll, BFu7ll_BFu15i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu15i_BFu33) C1{ FL:7 Fi:15 FL:33}



static void Test_BFu7ll_BFu15i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7ll_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu33, BFu7ll_BFu15i_BFu33)
//============================================================================


struct  BFu7ll_BFu15i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu15i_BFu7c) C1{ FL:7 Fi:15 Fc:7}



static void Test_BFu7ll_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu7c, BFu7ll_BFu15i_BFu7c)
//============================================================================


struct  BFu7ll_BFu15i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu15i_BFu7i) C1{ FL:7 Fi:15 Fi:7}



static void Test_BFu7ll_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu7i, BFu7ll_BFu15i_BFu7i)
//============================================================================


struct  BFu7ll_BFu15i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu15i_BFu7ll) C1{ FL:7 Fi:15 FL:7}



static void Test_BFu7ll_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu7ll, BFu7ll_BFu15i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu15i_BFu7s) C1{ FL:7 Fi:15 Fs:7}



static void Test_BFu7ll_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu7s, BFu7ll_BFu15i_BFu7s)
//============================================================================


struct  BFu7ll_BFu15i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu15i_BFu8c) C1{ FL:7 Fi:15 Fc:8}



static void Test_BFu7ll_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu8c, BFu7ll_BFu15i_BFu8c)
//============================================================================


struct  BFu7ll_BFu15i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu15i_BFu8i) C1{ FL:7 Fi:15 Fi:8}



static void Test_BFu7ll_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu8i, BFu7ll_BFu15i_BFu8i)
//============================================================================


struct  BFu7ll_BFu15i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu15i_BFu8ll) C1{ FL:7 Fi:15 FL:8}



static void Test_BFu7ll_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu8ll, BFu7ll_BFu15i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu15i_BFu8s) C1{ FL:7 Fi:15 Fs:8}



static void Test_BFu7ll_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu8s, BFu7ll_BFu15i_BFu8s)
//============================================================================


struct  BFu7ll_BFu15i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu15i_BFu9i) C1{ FL:7 Fi:15 Fi:9}



static void Test_BFu7ll_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu9i, BFu7ll_BFu15i_BFu9i)
//============================================================================


struct  BFu7ll_BFu15i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu15i_BFu9ll) C1{ FL:7 Fi:15 FL:9}



static void Test_BFu7ll_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu9ll, BFu7ll_BFu15i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu15i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu15i_BFu9s) C1{ FL:7 Fi:15 Fs:9}



static void Test_BFu7ll_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu15i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_BFu9s, BFu7ll_BFu15i_BFu9s)
//============================================================================


struct  BFu7ll_BFu15i_C  {
  __tsu64 v1:7;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu7ll_BFu15i_C) C1{ FL:7 Fi:15 Fc}



static void Test_BFu7ll_BFu15i_C()
{
  {
    init_simple_test("BFu7ll_BFu15i_C");
    static STRUCT_IF_C BFu7ll_BFu15i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_C, BFu7ll_BFu15i_C)
//============================================================================


struct  BFu7ll_BFu15i_D  {
  __tsu64 v1:7;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu7ll_BFu15i_D) C1{ FL:7 Fi:15 FL}



static void Test_BFu7ll_BFu15i_D()
{
  {
    init_simple_test("BFu7ll_BFu15i_D");
    static STRUCT_IF_C BFu7ll_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_D, BFu7ll_BFu15i_D)
//============================================================================


struct  BFu7ll_BFu15i_F  {
  __tsu64 v1:7;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu7ll_BFu15i_F) C1{ FL:7 Fi:15 Fi}



static void Test_BFu7ll_BFu15i_F()
{
  {
    init_simple_test("BFu7ll_BFu15i_F");
    static STRUCT_IF_C BFu7ll_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_F, BFu7ll_BFu15i_F)
//============================================================================


struct  BFu7ll_BFu15i_I  {
  __tsu64 v1:7;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu7ll_BFu15i_I) C1{ FL:7 Fi:15 Fi}



static void Test_BFu7ll_BFu15i_I()
{
  {
    init_simple_test("BFu7ll_BFu15i_I");
    static STRUCT_IF_C BFu7ll_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_I, BFu7ll_BFu15i_I)
//============================================================================


struct  BFu7ll_BFu15i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu7ll_BFu15i_Ip) C1{ FL:7 Fi:15 Fp}



static void Test_BFu7ll_BFu15i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu15i_Ip");
    static STRUCT_IF_C BFu7ll_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Ip, BFu7ll_BFu15i_Ip)
//============================================================================


struct  BFu7ll_BFu15i_L  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu15i_L) C1{ FL:7 Fi:15 FL}



static void Test_BFu7ll_BFu15i_L()
{
  {
    init_simple_test("BFu7ll_BFu15i_L");
    static STRUCT_IF_C BFu7ll_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_L, BFu7ll_BFu15i_L)
//============================================================================


struct  BFu7ll_BFu15i_S  {
  __tsu64 v1:7;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu7ll_BFu15i_S) C1{ FL:7 Fi:15 Fs}



static void Test_BFu7ll_BFu15i_S()
{
  {
    init_simple_test("BFu7ll_BFu15i_S");
    static STRUCT_IF_C BFu7ll_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_S, BFu7ll_BFu15i_S)
//============================================================================


struct  BFu7ll_BFu15i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu15i_Uc) C1{ FL:7 Fi:15 Fc}



static void Test_BFu7ll_BFu15i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu15i_Uc");
    static STRUCT_IF_C BFu7ll_BFu15i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Uc, BFu7ll_BFu15i_Uc)
//============================================================================


struct  BFu7ll_BFu15i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu15i_Ui) C1{ FL:7 Fi:15 Fi}



static void Test_BFu7ll_BFu15i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu15i_Ui");
    static STRUCT_IF_C BFu7ll_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Ui, BFu7ll_BFu15i_Ui)
//============================================================================


struct  BFu7ll_BFu15i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu15i_Ul) C1{ FL:7 Fi:15 FL}



static void Test_BFu7ll_BFu15i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu15i_Ul");
    static STRUCT_IF_C BFu7ll_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Ul, BFu7ll_BFu15i_Ul)
//============================================================================


struct  BFu7ll_BFu15i_Us  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu15i_Us) C1{ FL:7 Fi:15 Fs}



static void Test_BFu7ll_BFu15i_Us()
{
  {
    init_simple_test("BFu7ll_BFu15i_Us");
    static STRUCT_IF_C BFu7ll_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Us, BFu7ll_BFu15i_Us)
//============================================================================


struct  BFu7ll_BFu15i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu7ll_BFu15i_Vp) C1{ FL:7 Fi:15 Fp}



static void Test_BFu7ll_BFu15i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu15i_Vp");
    static STRUCT_IF_C BFu7ll_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15i_Vp, BFu7ll_BFu15i_Vp)
//============================================================================


struct  BFu7ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu7ll_BFu15ll) C1{ FL:7 FL:15}



static void Test_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll, BFu7ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu15ll_BFu15i) C1{ FL:7 FL:15 Fi:15}



static void Test_BFu7ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu15i, BFu7ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu15ll_BFu15ll) C1{ FL:7 FL:15 FL:15}



static void Test_BFu7ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu15ll, BFu7ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu15ll_BFu15s) C1{ FL:7 FL:15 Fs:15}



static void Test_BFu7ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu15s, BFu7ll_BFu15ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu15ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu15ll_BFu16i) C1{ FL:7 FL:15 Fi:16}



static void Test_BFu7ll_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu16i, BFu7ll_BFu15ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu15ll_BFu16ll) C1{ FL:7 FL:15 FL:16}



static void Test_BFu7ll_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu16ll, BFu7ll_BFu15ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu15ll_BFu16s) C1{ FL:7 FL:15 Fs:16}



static void Test_BFu7ll_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu16s, BFu7ll_BFu15ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu15ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu15ll_BFu17i) C1{ FL:7 FL:15 Fi:17}



static void Test_BFu7ll_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu17i, BFu7ll_BFu15ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu15ll_BFu17ll) C1{ FL:7 FL:15 FL:17}



static void Test_BFu7ll_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu17ll, BFu7ll_BFu15ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu15ll_BFu1c) C1{ FL:7 FL:15 Fc:1}



static void Test_BFu7ll_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu1c, BFu7ll_BFu15ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu15ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu15ll_BFu1i) C1{ FL:7 FL:15 Fi:1}



static void Test_BFu7ll_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu1i, BFu7ll_BFu15ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu15ll_BFu1ll) C1{ FL:7 FL:15 FL:1}



static void Test_BFu7ll_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu1ll, BFu7ll_BFu15ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu15ll_BFu1s) C1{ FL:7 FL:15 Fs:1}



static void Test_BFu7ll_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7ll_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu1s, BFu7ll_BFu15ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu15ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu15ll_BFu31i) C1{ FL:7 FL:15 Fi:31}



static void Test_BFu7ll_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu31i, BFu7ll_BFu15ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu15ll_BFu31ll) C1{ FL:7 FL:15 FL:31}



static void Test_BFu7ll_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7ll_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu31ll, BFu7ll_BFu15ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu15ll_BFu32i) C1{ FL:7 FL:15 Fi:32}



static void Test_BFu7ll_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu32i, BFu7ll_BFu15ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu15ll_BFu32ll) C1{ FL:7 FL:15 FL:32}



static void Test_BFu7ll_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7ll_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu32ll, BFu7ll_BFu15ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu15ll_BFu33) C1{ FL:7 FL:15 FL:33}



static void Test_BFu7ll_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7ll_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu33, BFu7ll_BFu15ll_BFu33)
//============================================================================


struct  BFu7ll_BFu15ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu15ll_BFu7c) C1{ FL:7 FL:15 Fc:7}



static void Test_BFu7ll_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu7c, BFu7ll_BFu15ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu15ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu15ll_BFu7i) C1{ FL:7 FL:15 Fi:7}



static void Test_BFu7ll_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu7i, BFu7ll_BFu15ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu15ll_BFu7ll) C1{ FL:7 FL:15 FL:7}



static void Test_BFu7ll_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu7ll, BFu7ll_BFu15ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu15ll_BFu7s) C1{ FL:7 FL:15 Fs:7}



static void Test_BFu7ll_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu7s, BFu7ll_BFu15ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu15ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu15ll_BFu8c) C1{ FL:7 FL:15 Fc:8}



static void Test_BFu7ll_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu8c, BFu7ll_BFu15ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu15ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu15ll_BFu8i) C1{ FL:7 FL:15 Fi:8}



static void Test_BFu7ll_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu8i, BFu7ll_BFu15ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu15ll_BFu8ll) C1{ FL:7 FL:15 FL:8}



static void Test_BFu7ll_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu8ll, BFu7ll_BFu15ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu15ll_BFu8s) C1{ FL:7 FL:15 Fs:8}



static void Test_BFu7ll_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu8s, BFu7ll_BFu15ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu15ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu15ll_BFu9i) C1{ FL:7 FL:15 Fi:9}



static void Test_BFu7ll_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu9i, BFu7ll_BFu15ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu15ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu15ll_BFu9ll) C1{ FL:7 FL:15 FL:9}



static void Test_BFu7ll_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu9ll, BFu7ll_BFu15ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu15ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu15ll_BFu9s) C1{ FL:7 FL:15 Fs:9}



static void Test_BFu7ll_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_BFu9s, BFu7ll_BFu15ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu15ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu7ll_BFu15ll_C) C1{ FL:7 FL:15 Fc}



static void Test_BFu7ll_BFu15ll_C()
{
  {
    init_simple_test("BFu7ll_BFu15ll_C");
    static STRUCT_IF_C BFu7ll_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_C, BFu7ll_BFu15ll_C)
//============================================================================


struct  BFu7ll_BFu15ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu7ll_BFu15ll_D) C1{ FL:7 FL:15 FL}



static void Test_BFu7ll_BFu15ll_D()
{
  {
    init_simple_test("BFu7ll_BFu15ll_D");
    static STRUCT_IF_C BFu7ll_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_D, BFu7ll_BFu15ll_D)
//============================================================================


struct  BFu7ll_BFu15ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu7ll_BFu15ll_F) C1{ FL:7 FL:15 Fi}



static void Test_BFu7ll_BFu15ll_F()
{
  {
    init_simple_test("BFu7ll_BFu15ll_F");
    static STRUCT_IF_C BFu7ll_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_F, BFu7ll_BFu15ll_F)
//============================================================================


struct  BFu7ll_BFu15ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu7ll_BFu15ll_I) C1{ FL:7 FL:15 Fi}



static void Test_BFu7ll_BFu15ll_I()
{
  {
    init_simple_test("BFu7ll_BFu15ll_I");
    static STRUCT_IF_C BFu7ll_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_I, BFu7ll_BFu15ll_I)
//============================================================================


struct  BFu7ll_BFu15ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu7ll_BFu15ll_Ip) C1{ FL:7 FL:15 Fp}



static void Test_BFu7ll_BFu15ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Ip, BFu7ll_BFu15ll_Ip)
//============================================================================


struct  BFu7ll_BFu15ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu15ll_L) C1{ FL:7 FL:15 FL}



static void Test_BFu7ll_BFu15ll_L()
{
  {
    init_simple_test("BFu7ll_BFu15ll_L");
    static STRUCT_IF_C BFu7ll_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_L, BFu7ll_BFu15ll_L)
//============================================================================


struct  BFu7ll_BFu15ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu7ll_BFu15ll_S) C1{ FL:7 FL:15 Fs}



static void Test_BFu7ll_BFu15ll_S()
{
  {
    init_simple_test("BFu7ll_BFu15ll_S");
    static STRUCT_IF_C BFu7ll_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_S, BFu7ll_BFu15ll_S)
//============================================================================


struct  BFu7ll_BFu15ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu15ll_Uc) C1{ FL:7 FL:15 Fc}



static void Test_BFu7ll_BFu15ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Uc, BFu7ll_BFu15ll_Uc)
//============================================================================


struct  BFu7ll_BFu15ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu15ll_Ui) C1{ FL:7 FL:15 Fi}



static void Test_BFu7ll_BFu15ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Ui, BFu7ll_BFu15ll_Ui)
//============================================================================


struct  BFu7ll_BFu15ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu15ll_Ul) C1{ FL:7 FL:15 FL}



static void Test_BFu7ll_BFu15ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Ul, BFu7ll_BFu15ll_Ul)
//============================================================================


struct  BFu7ll_BFu15ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu15ll_Us) C1{ FL:7 FL:15 Fs}



static void Test_BFu7ll_BFu15ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Us");
    static STRUCT_IF_C BFu7ll_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Us, BFu7ll_BFu15ll_Us)
//============================================================================


struct  BFu7ll_BFu15ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu7ll_BFu15ll_Vp) C1{ FL:7 FL:15 Fp}



static void Test_BFu7ll_BFu15ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu15ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15ll_Vp, BFu7ll_BFu15ll_Vp)
//============================================================================


struct  BFu7ll_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu7ll_BFu15s) C1{ FL:7 Fs:15}



static void Test_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s, BFu7ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu15s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu15s_BFu15i) C1{ FL:7 Fs:15 Fi:15}



static void Test_BFu7ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu15i, BFu7ll_BFu15s_BFu15i)
//============================================================================


struct  BFu7ll_BFu15s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu15s_BFu15ll) C1{ FL:7 Fs:15 FL:15}



static void Test_BFu7ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu7ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu15ll, BFu7ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu15s_BFu15s) C1{ FL:7 Fs:15 Fs:15}



static void Test_BFu7ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu15s, BFu7ll_BFu15s_BFu15s)
//============================================================================


struct  BFu7ll_BFu15s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu15s_BFu16i) C1{ FL:7 Fs:15 Fi:16}



static void Test_BFu7ll_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu16i, BFu7ll_BFu15s_BFu16i)
//============================================================================


struct  BFu7ll_BFu15s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu15s_BFu16ll) C1{ FL:7 Fs:15 FL:16}



static void Test_BFu7ll_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu7ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu16ll, BFu7ll_BFu15s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu15s_BFu16s) C1{ FL:7 Fs:15 Fs:16}



static void Test_BFu7ll_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu16s, BFu7ll_BFu15s_BFu16s)
//============================================================================


struct  BFu7ll_BFu15s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu15s_BFu17i) C1{ FL:7 Fs:15 Fi:17}



static void Test_BFu7ll_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu17i, BFu7ll_BFu15s_BFu17i)
//============================================================================


struct  BFu7ll_BFu15s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu15s_BFu17ll) C1{ FL:7 Fs:15 FL:17}



static void Test_BFu7ll_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu7ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu17ll, BFu7ll_BFu15s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu15s_BFu1c) C1{ FL:7 Fs:15 Fc:1}



static void Test_BFu7ll_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7ll_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu1c, BFu7ll_BFu15s_BFu1c)
//============================================================================


struct  BFu7ll_BFu15s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu15s_BFu1i) C1{ FL:7 Fs:15 Fi:1}



static void Test_BFu7ll_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7ll_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu1i, BFu7ll_BFu15s_BFu1i)
//============================================================================


struct  BFu7ll_BFu15s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu15s_BFu1ll) C1{ FL:7 Fs:15 FL:1}



static void Test_BFu7ll_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7ll_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu1ll, BFu7ll_BFu15s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu15s_BFu1s) C1{ FL:7 Fs:15 Fs:1}



static void Test_BFu7ll_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7ll_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu1s, BFu7ll_BFu15s_BFu1s)
//============================================================================


struct  BFu7ll_BFu15s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu15s_BFu31i) C1{ FL:7 Fs:15 Fi:31}



static void Test_BFu7ll_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu31i, BFu7ll_BFu15s_BFu31i)
//============================================================================


struct  BFu7ll_BFu15s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu15s_BFu31ll) C1{ FL:7 Fs:15 FL:31}



static void Test_BFu7ll_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu7ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu31ll, BFu7ll_BFu15s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu15s_BFu32i) C1{ FL:7 Fs:15 Fi:32}



static void Test_BFu7ll_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu32i, BFu7ll_BFu15s_BFu32i)
//============================================================================


struct  BFu7ll_BFu15s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu15s_BFu32ll) C1{ FL:7 Fs:15 FL:32}



static void Test_BFu7ll_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu7ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu32ll, BFu7ll_BFu15s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu15s_BFu33) C1{ FL:7 Fs:15 FL:33}



static void Test_BFu7ll_BFu15s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu7ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu33, BFu7ll_BFu15s_BFu33)
//============================================================================


struct  BFu7ll_BFu15s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu15s_BFu7c) C1{ FL:7 Fs:15 Fc:7}



static void Test_BFu7ll_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu7c, BFu7ll_BFu15s_BFu7c)
//============================================================================


struct  BFu7ll_BFu15s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu15s_BFu7i) C1{ FL:7 Fs:15 Fi:7}



static void Test_BFu7ll_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu7i, BFu7ll_BFu15s_BFu7i)
//============================================================================


struct  BFu7ll_BFu15s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu15s_BFu7ll) C1{ FL:7 Fs:15 FL:7}



static void Test_BFu7ll_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu7ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu7ll, BFu7ll_BFu15s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu15s_BFu7s) C1{ FL:7 Fs:15 Fs:7}



static void Test_BFu7ll_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu7s, BFu7ll_BFu15s_BFu7s)
//============================================================================


struct  BFu7ll_BFu15s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu15s_BFu8c) C1{ FL:7 Fs:15 Fc:8}



static void Test_BFu7ll_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu8c, BFu7ll_BFu15s_BFu8c)
//============================================================================


struct  BFu7ll_BFu15s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu15s_BFu8i) C1{ FL:7 Fs:15 Fi:8}



static void Test_BFu7ll_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu8i, BFu7ll_BFu15s_BFu8i)
//============================================================================


struct  BFu7ll_BFu15s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu15s_BFu8ll) C1{ FL:7 Fs:15 FL:8}



static void Test_BFu7ll_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu7ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu8ll, BFu7ll_BFu15s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu15s_BFu8s) C1{ FL:7 Fs:15 Fs:8}



static void Test_BFu7ll_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu8s, BFu7ll_BFu15s_BFu8s)
//============================================================================


struct  BFu7ll_BFu15s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu15s_BFu9i) C1{ FL:7 Fs:15 Fi:9}



static void Test_BFu7ll_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu9i, BFu7ll_BFu15s_BFu9i)
//============================================================================


struct  BFu7ll_BFu15s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu15s_BFu9ll) C1{ FL:7 Fs:15 FL:9}



static void Test_BFu7ll_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu7ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu9ll, BFu7ll_BFu15s_BFu9ll)
//============================================================================


struct  BFu7ll_BFu15s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu15s_BFu9s) C1{ FL:7 Fs:15 Fs:9}



static void Test_BFu7ll_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_BFu9s, BFu7ll_BFu15s_BFu9s)
//============================================================================


struct  BFu7ll_BFu15s_C  {
  __tsu64 v1:7;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu7ll_BFu15s_C) C1{ FL:7 Fs:15 Fc}



static void Test_BFu7ll_BFu15s_C()
{
  {
    init_simple_test("BFu7ll_BFu15s_C");
    static STRUCT_IF_C BFu7ll_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_C, BFu7ll_BFu15s_C)
//============================================================================


struct  BFu7ll_BFu15s_D  {
  __tsu64 v1:7;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu7ll_BFu15s_D) C1{ FL:7 Fs:15 FL}



static void Test_BFu7ll_BFu15s_D()
{
  {
    init_simple_test("BFu7ll_BFu15s_D");
    static STRUCT_IF_C BFu7ll_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_D, BFu7ll_BFu15s_D)
//============================================================================


struct  BFu7ll_BFu15s_F  {
  __tsu64 v1:7;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu7ll_BFu15s_F) C1{ FL:7 Fs:15 Fi}



static void Test_BFu7ll_BFu15s_F()
{
  {
    init_simple_test("BFu7ll_BFu15s_F");
    static STRUCT_IF_C BFu7ll_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_F, BFu7ll_BFu15s_F)
//============================================================================


struct  BFu7ll_BFu15s_I  {
  __tsu64 v1:7;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu7ll_BFu15s_I) C1{ FL:7 Fs:15 Fi}



static void Test_BFu7ll_BFu15s_I()
{
  {
    init_simple_test("BFu7ll_BFu15s_I");
    static STRUCT_IF_C BFu7ll_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_I, BFu7ll_BFu15s_I)
//============================================================================


struct  BFu7ll_BFu15s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu7ll_BFu15s_Ip) C1{ FL:7 Fs:15 Fp}



static void Test_BFu7ll_BFu15s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu15s_Ip");
    static STRUCT_IF_C BFu7ll_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Ip, BFu7ll_BFu15s_Ip)
//============================================================================


struct  BFu7ll_BFu15s_L  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu15s_L) C1{ FL:7 Fs:15 FL}



static void Test_BFu7ll_BFu15s_L()
{
  {
    init_simple_test("BFu7ll_BFu15s_L");
    static STRUCT_IF_C BFu7ll_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_L, BFu7ll_BFu15s_L)
//============================================================================


struct  BFu7ll_BFu15s_S  {
  __tsu64 v1:7;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu7ll_BFu15s_S) C1{ FL:7 Fs:15 Fs}



static void Test_BFu7ll_BFu15s_S()
{
  {
    init_simple_test("BFu7ll_BFu15s_S");
    static STRUCT_IF_C BFu7ll_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_S, BFu7ll_BFu15s_S)
//============================================================================


struct  BFu7ll_BFu15s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu15s_Uc) C1{ FL:7 Fs:15 Fc}



static void Test_BFu7ll_BFu15s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu15s_Uc");
    static STRUCT_IF_C BFu7ll_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Uc, BFu7ll_BFu15s_Uc)
//============================================================================


struct  BFu7ll_BFu15s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu15s_Ui) C1{ FL:7 Fs:15 Fi}



static void Test_BFu7ll_BFu15s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu15s_Ui");
    static STRUCT_IF_C BFu7ll_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Ui, BFu7ll_BFu15s_Ui)
//============================================================================


struct  BFu7ll_BFu15s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu15s_Ul) C1{ FL:7 Fs:15 FL}



static void Test_BFu7ll_BFu15s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu15s_Ul");
    static STRUCT_IF_C BFu7ll_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Ul, BFu7ll_BFu15s_Ul)
//============================================================================


struct  BFu7ll_BFu15s_Us  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu15s_Us) C1{ FL:7 Fs:15 Fs}



static void Test_BFu7ll_BFu15s_Us()
{
  {
    init_simple_test("BFu7ll_BFu15s_Us");
    static STRUCT_IF_C BFu7ll_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu15s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Us, BFu7ll_BFu15s_Us)
//============================================================================


struct  BFu7ll_BFu15s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu7ll_BFu15s_Vp) C1{ FL:7 Fs:15 Fp}



static void Test_BFu7ll_BFu15s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu15s_Vp");
    static STRUCT_IF_C BFu7ll_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu15s_Vp, BFu7ll_BFu15s_Vp)
//============================================================================


struct  BFu7ll_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu7ll_BFu16i) C1{ FL:7 Fi:16}



static void Test_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i, BFu7ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu16i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu16i_BFu15i) C1{ FL:7 Fi:16 Fi:15}



static void Test_BFu7ll_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu15i, BFu7ll_BFu16i_BFu15i)
//============================================================================


struct  BFu7ll_BFu16i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu16i_BFu15ll) C1{ FL:7 Fi:16 FL:15}



static void Test_BFu7ll_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu15ll, BFu7ll_BFu16i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu16i_BFu15s) C1{ FL:7 Fi:16 Fs:15}



static void Test_BFu7ll_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu15s, BFu7ll_BFu16i_BFu15s)
//============================================================================


struct  BFu7ll_BFu16i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu16i_BFu16i) C1{ FL:7 Fi:16 Fi:16}



static void Test_BFu7ll_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu16i, BFu7ll_BFu16i_BFu16i)
//============================================================================


struct  BFu7ll_BFu16i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu16i_BFu16ll) C1{ FL:7 Fi:16 FL:16}



static void Test_BFu7ll_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu16ll, BFu7ll_BFu16i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu16i_BFu16s) C1{ FL:7 Fi:16 Fs:16}



static void Test_BFu7ll_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu16s, BFu7ll_BFu16i_BFu16s)
//============================================================================


struct  BFu7ll_BFu16i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu16i_BFu17i) C1{ FL:7 Fi:16 Fi:17}



static void Test_BFu7ll_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu17i, BFu7ll_BFu16i_BFu17i)
//============================================================================


struct  BFu7ll_BFu16i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu16i_BFu17ll) C1{ FL:7 Fi:16 FL:17}



static void Test_BFu7ll_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu17ll, BFu7ll_BFu16i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu16i_BFu1c) C1{ FL:7 Fi:16 Fc:1}



static void Test_BFu7ll_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu1c, BFu7ll_BFu16i_BFu1c)
//============================================================================


struct  BFu7ll_BFu16i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu16i_BFu1i) C1{ FL:7 Fi:16 Fi:1}



static void Test_BFu7ll_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu1i, BFu7ll_BFu16i_BFu1i)
//============================================================================


struct  BFu7ll_BFu16i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu16i_BFu1ll) C1{ FL:7 Fi:16 FL:1}



static void Test_BFu7ll_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu1ll, BFu7ll_BFu16i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu16i_BFu1s) C1{ FL:7 Fi:16 Fs:1}



static void Test_BFu7ll_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu1s, BFu7ll_BFu16i_BFu1s)
//============================================================================


struct  BFu7ll_BFu16i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu16i_BFu31i) C1{ FL:7 Fi:16 Fi:31}



static void Test_BFu7ll_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu31i, BFu7ll_BFu16i_BFu31i)
//============================================================================


struct  BFu7ll_BFu16i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu16i_BFu31ll) C1{ FL:7 Fi:16 FL:31}



static void Test_BFu7ll_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu31ll, BFu7ll_BFu16i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu16i_BFu32i) C1{ FL:7 Fi:16 Fi:32}



static void Test_BFu7ll_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu32i, BFu7ll_BFu16i_BFu32i)
//============================================================================


struct  BFu7ll_BFu16i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu16i_BFu32ll) C1{ FL:7 Fi:16 FL:32}



static void Test_BFu7ll_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu32ll, BFu7ll_BFu16i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu16i_BFu33) C1{ FL:7 Fi:16 FL:33}



static void Test_BFu7ll_BFu16i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu33, BFu7ll_BFu16i_BFu33)
//============================================================================


struct  BFu7ll_BFu16i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu16i_BFu7c) C1{ FL:7 Fi:16 Fc:7}



static void Test_BFu7ll_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu7c, BFu7ll_BFu16i_BFu7c)
//============================================================================


struct  BFu7ll_BFu16i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu16i_BFu7i) C1{ FL:7 Fi:16 Fi:7}



static void Test_BFu7ll_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu7i, BFu7ll_BFu16i_BFu7i)
//============================================================================


struct  BFu7ll_BFu16i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu16i_BFu7ll) C1{ FL:7 Fi:16 FL:7}



static void Test_BFu7ll_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu7ll, BFu7ll_BFu16i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu16i_BFu7s) C1{ FL:7 Fi:16 Fs:7}



static void Test_BFu7ll_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu7s, BFu7ll_BFu16i_BFu7s)
//============================================================================


struct  BFu7ll_BFu16i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu16i_BFu8c) C1{ FL:7 Fi:16 Fc:8}



static void Test_BFu7ll_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu8c, BFu7ll_BFu16i_BFu8c)
//============================================================================


struct  BFu7ll_BFu16i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu16i_BFu8i) C1{ FL:7 Fi:16 Fi:8}



static void Test_BFu7ll_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu8i, BFu7ll_BFu16i_BFu8i)
//============================================================================


struct  BFu7ll_BFu16i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu16i_BFu8ll) C1{ FL:7 Fi:16 FL:8}



static void Test_BFu7ll_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu8ll, BFu7ll_BFu16i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu16i_BFu8s) C1{ FL:7 Fi:16 Fs:8}



static void Test_BFu7ll_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu8s, BFu7ll_BFu16i_BFu8s)
//============================================================================


struct  BFu7ll_BFu16i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu16i_BFu9i) C1{ FL:7 Fi:16 Fi:9}



static void Test_BFu7ll_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu9i, BFu7ll_BFu16i_BFu9i)
//============================================================================


struct  BFu7ll_BFu16i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu16i_BFu9ll) C1{ FL:7 Fi:16 FL:9}



static void Test_BFu7ll_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu9ll, BFu7ll_BFu16i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu16i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu16i_BFu9s) C1{ FL:7 Fi:16 Fs:9}



static void Test_BFu7ll_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu16i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_BFu9s, BFu7ll_BFu16i_BFu9s)
//============================================================================


struct  BFu7ll_BFu16i_C  {
  __tsu64 v1:7;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu7ll_BFu16i_C) C1{ FL:7 Fi:16 Fc}



static void Test_BFu7ll_BFu16i_C()
{
  {
    init_simple_test("BFu7ll_BFu16i_C");
    static STRUCT_IF_C BFu7ll_BFu16i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_C, BFu7ll_BFu16i_C)
//============================================================================


struct  BFu7ll_BFu16i_D  {
  __tsu64 v1:7;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu7ll_BFu16i_D) C1{ FL:7 Fi:16 FL}



static void Test_BFu7ll_BFu16i_D()
{
  {
    init_simple_test("BFu7ll_BFu16i_D");
    static STRUCT_IF_C BFu7ll_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_D, BFu7ll_BFu16i_D)
//============================================================================


struct  BFu7ll_BFu16i_F  {
  __tsu64 v1:7;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu7ll_BFu16i_F) C1{ FL:7 Fi:16 Fi}



static void Test_BFu7ll_BFu16i_F()
{
  {
    init_simple_test("BFu7ll_BFu16i_F");
    static STRUCT_IF_C BFu7ll_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_F, BFu7ll_BFu16i_F)
//============================================================================


struct  BFu7ll_BFu16i_I  {
  __tsu64 v1:7;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu7ll_BFu16i_I) C1{ FL:7 Fi:16 Fi}



static void Test_BFu7ll_BFu16i_I()
{
  {
    init_simple_test("BFu7ll_BFu16i_I");
    static STRUCT_IF_C BFu7ll_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_I, BFu7ll_BFu16i_I)
//============================================================================


struct  BFu7ll_BFu16i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu7ll_BFu16i_Ip) C1{ FL:7 Fi:16 Fp}



static void Test_BFu7ll_BFu16i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu16i_Ip");
    static STRUCT_IF_C BFu7ll_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Ip, BFu7ll_BFu16i_Ip)
//============================================================================


struct  BFu7ll_BFu16i_L  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu16i_L) C1{ FL:7 Fi:16 FL}



static void Test_BFu7ll_BFu16i_L()
{
  {
    init_simple_test("BFu7ll_BFu16i_L");
    static STRUCT_IF_C BFu7ll_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_L, BFu7ll_BFu16i_L)
//============================================================================


struct  BFu7ll_BFu16i_S  {
  __tsu64 v1:7;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu7ll_BFu16i_S) C1{ FL:7 Fi:16 Fs}



static void Test_BFu7ll_BFu16i_S()
{
  {
    init_simple_test("BFu7ll_BFu16i_S");
    static STRUCT_IF_C BFu7ll_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_S, BFu7ll_BFu16i_S)
//============================================================================


struct  BFu7ll_BFu16i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu16i_Uc) C1{ FL:7 Fi:16 Fc}



static void Test_BFu7ll_BFu16i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu16i_Uc");
    static STRUCT_IF_C BFu7ll_BFu16i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Uc, BFu7ll_BFu16i_Uc)
//============================================================================


struct  BFu7ll_BFu16i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu16i_Ui) C1{ FL:7 Fi:16 Fi}



static void Test_BFu7ll_BFu16i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu16i_Ui");
    static STRUCT_IF_C BFu7ll_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Ui, BFu7ll_BFu16i_Ui)
//============================================================================


struct  BFu7ll_BFu16i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu16i_Ul) C1{ FL:7 Fi:16 FL}



static void Test_BFu7ll_BFu16i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu16i_Ul");
    static STRUCT_IF_C BFu7ll_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Ul, BFu7ll_BFu16i_Ul)
//============================================================================


struct  BFu7ll_BFu16i_Us  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu16i_Us) C1{ FL:7 Fi:16 Fs}



static void Test_BFu7ll_BFu16i_Us()
{
  {
    init_simple_test("BFu7ll_BFu16i_Us");
    static STRUCT_IF_C BFu7ll_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Us, BFu7ll_BFu16i_Us)
//============================================================================


struct  BFu7ll_BFu16i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu7ll_BFu16i_Vp) C1{ FL:7 Fi:16 Fp}



static void Test_BFu7ll_BFu16i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu16i_Vp");
    static STRUCT_IF_C BFu7ll_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16i_Vp, BFu7ll_BFu16i_Vp)
//============================================================================


struct  BFu7ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu7ll_BFu16ll) C1{ FL:7 FL:16}



static void Test_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll, BFu7ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu16ll_BFu15i) C1{ FL:7 FL:16 Fi:15}



static void Test_BFu7ll_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu15i, BFu7ll_BFu16ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu16ll_BFu15ll) C1{ FL:7 FL:16 FL:15}



static void Test_BFu7ll_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu15ll, BFu7ll_BFu16ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu16ll_BFu15s) C1{ FL:7 FL:16 Fs:15}



static void Test_BFu7ll_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu15s, BFu7ll_BFu16ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu16ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu16ll_BFu16i) C1{ FL:7 FL:16 Fi:16}



static void Test_BFu7ll_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu16i, BFu7ll_BFu16ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu16ll_BFu16ll) C1{ FL:7 FL:16 FL:16}



static void Test_BFu7ll_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu16ll, BFu7ll_BFu16ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu16ll_BFu16s) C1{ FL:7 FL:16 Fs:16}



static void Test_BFu7ll_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu16s, BFu7ll_BFu16ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu16ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu16ll_BFu17i) C1{ FL:7 FL:16 Fi:17}



static void Test_BFu7ll_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu17i, BFu7ll_BFu16ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu16ll_BFu17ll) C1{ FL:7 FL:16 FL:17}



static void Test_BFu7ll_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu17ll, BFu7ll_BFu16ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu16ll_BFu1c) C1{ FL:7 FL:16 Fc:1}



static void Test_BFu7ll_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu1c, BFu7ll_BFu16ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu16ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu16ll_BFu1i) C1{ FL:7 FL:16 Fi:1}



static void Test_BFu7ll_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu1i, BFu7ll_BFu16ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu16ll_BFu1ll) C1{ FL:7 FL:16 FL:1}



static void Test_BFu7ll_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu1ll, BFu7ll_BFu16ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu16ll_BFu1s) C1{ FL:7 FL:16 Fs:1}



static void Test_BFu7ll_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7ll_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu1s, BFu7ll_BFu16ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu16ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu16ll_BFu31i) C1{ FL:7 FL:16 Fi:31}



static void Test_BFu7ll_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu31i, BFu7ll_BFu16ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu16ll_BFu31ll) C1{ FL:7 FL:16 FL:31}



static void Test_BFu7ll_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu31ll, BFu7ll_BFu16ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu16ll_BFu32i) C1{ FL:7 FL:16 Fi:32}



static void Test_BFu7ll_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu32i, BFu7ll_BFu16ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu16ll_BFu32ll) C1{ FL:7 FL:16 FL:32}



static void Test_BFu7ll_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu32ll, BFu7ll_BFu16ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu16ll_BFu33) C1{ FL:7 FL:16 FL:33}



static void Test_BFu7ll_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu33, BFu7ll_BFu16ll_BFu33)
//============================================================================


struct  BFu7ll_BFu16ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu16ll_BFu7c) C1{ FL:7 FL:16 Fc:7}



static void Test_BFu7ll_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu7c, BFu7ll_BFu16ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu16ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu16ll_BFu7i) C1{ FL:7 FL:16 Fi:7}



static void Test_BFu7ll_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu7i, BFu7ll_BFu16ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu16ll_BFu7ll) C1{ FL:7 FL:16 FL:7}



static void Test_BFu7ll_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu7ll, BFu7ll_BFu16ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu16ll_BFu7s) C1{ FL:7 FL:16 Fs:7}



static void Test_BFu7ll_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu7s, BFu7ll_BFu16ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu16ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu16ll_BFu8c) C1{ FL:7 FL:16 Fc:8}



static void Test_BFu7ll_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu8c, BFu7ll_BFu16ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu16ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu16ll_BFu8i) C1{ FL:7 FL:16 Fi:8}



static void Test_BFu7ll_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu8i, BFu7ll_BFu16ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu16ll_BFu8ll) C1{ FL:7 FL:16 FL:8}



static void Test_BFu7ll_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu8ll, BFu7ll_BFu16ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu16ll_BFu8s) C1{ FL:7 FL:16 Fs:8}



static void Test_BFu7ll_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu8s, BFu7ll_BFu16ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu16ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu16ll_BFu9i) C1{ FL:7 FL:16 Fi:9}



static void Test_BFu7ll_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu9i, BFu7ll_BFu16ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu16ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu16ll_BFu9ll) C1{ FL:7 FL:16 FL:9}



static void Test_BFu7ll_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu9ll, BFu7ll_BFu16ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu16ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu16ll_BFu9s) C1{ FL:7 FL:16 Fs:9}



static void Test_BFu7ll_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_BFu9s, BFu7ll_BFu16ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu16ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu7ll_BFu16ll_C) C1{ FL:7 FL:16 Fc}



static void Test_BFu7ll_BFu16ll_C()
{
  {
    init_simple_test("BFu7ll_BFu16ll_C");
    static STRUCT_IF_C BFu7ll_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_C, BFu7ll_BFu16ll_C)
//============================================================================


struct  BFu7ll_BFu16ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu7ll_BFu16ll_D) C1{ FL:7 FL:16 FL}



static void Test_BFu7ll_BFu16ll_D()
{
  {
    init_simple_test("BFu7ll_BFu16ll_D");
    static STRUCT_IF_C BFu7ll_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_D, BFu7ll_BFu16ll_D)
//============================================================================


struct  BFu7ll_BFu16ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu7ll_BFu16ll_F) C1{ FL:7 FL:16 Fi}



static void Test_BFu7ll_BFu16ll_F()
{
  {
    init_simple_test("BFu7ll_BFu16ll_F");
    static STRUCT_IF_C BFu7ll_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_F, BFu7ll_BFu16ll_F)
//============================================================================


struct  BFu7ll_BFu16ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu7ll_BFu16ll_I) C1{ FL:7 FL:16 Fi}



static void Test_BFu7ll_BFu16ll_I()
{
  {
    init_simple_test("BFu7ll_BFu16ll_I");
    static STRUCT_IF_C BFu7ll_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_I, BFu7ll_BFu16ll_I)
//============================================================================


struct  BFu7ll_BFu16ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu7ll_BFu16ll_Ip) C1{ FL:7 FL:16 Fp}



static void Test_BFu7ll_BFu16ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Ip, BFu7ll_BFu16ll_Ip)
//============================================================================


struct  BFu7ll_BFu16ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu16ll_L) C1{ FL:7 FL:16 FL}



static void Test_BFu7ll_BFu16ll_L()
{
  {
    init_simple_test("BFu7ll_BFu16ll_L");
    static STRUCT_IF_C BFu7ll_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_L, BFu7ll_BFu16ll_L)
//============================================================================


struct  BFu7ll_BFu16ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu7ll_BFu16ll_S) C1{ FL:7 FL:16 Fs}



static void Test_BFu7ll_BFu16ll_S()
{
  {
    init_simple_test("BFu7ll_BFu16ll_S");
    static STRUCT_IF_C BFu7ll_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_S, BFu7ll_BFu16ll_S)
//============================================================================


struct  BFu7ll_BFu16ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu16ll_Uc) C1{ FL:7 FL:16 Fc}



static void Test_BFu7ll_BFu16ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Uc, BFu7ll_BFu16ll_Uc)
//============================================================================


struct  BFu7ll_BFu16ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu16ll_Ui) C1{ FL:7 FL:16 Fi}



static void Test_BFu7ll_BFu16ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Ui, BFu7ll_BFu16ll_Ui)
//============================================================================


struct  BFu7ll_BFu16ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu16ll_Ul) C1{ FL:7 FL:16 FL}



static void Test_BFu7ll_BFu16ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Ul, BFu7ll_BFu16ll_Ul)
//============================================================================


struct  BFu7ll_BFu16ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu16ll_Us) C1{ FL:7 FL:16 Fs}



static void Test_BFu7ll_BFu16ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Us");
    static STRUCT_IF_C BFu7ll_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Us, BFu7ll_BFu16ll_Us)
//============================================================================


struct  BFu7ll_BFu16ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu7ll_BFu16ll_Vp) C1{ FL:7 FL:16 Fp}



static void Test_BFu7ll_BFu16ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu16ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16ll_Vp, BFu7ll_BFu16ll_Vp)
//============================================================================


struct  BFu7ll_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu7ll_BFu16s) C1{ FL:7 Fs:16}



static void Test_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s, BFu7ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu16s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu16s_BFu15i) C1{ FL:7 Fs:16 Fi:15}



static void Test_BFu7ll_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu15i, BFu7ll_BFu16s_BFu15i)
//============================================================================


struct  BFu7ll_BFu16s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu16s_BFu15ll) C1{ FL:7 Fs:16 FL:15}



static void Test_BFu7ll_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu15ll, BFu7ll_BFu16s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu16s_BFu15s) C1{ FL:7 Fs:16 Fs:15}



static void Test_BFu7ll_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu15s, BFu7ll_BFu16s_BFu15s)
//============================================================================


struct  BFu7ll_BFu16s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu16s_BFu16i) C1{ FL:7 Fs:16 Fi:16}



static void Test_BFu7ll_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu16i, BFu7ll_BFu16s_BFu16i)
//============================================================================


struct  BFu7ll_BFu16s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu16s_BFu16ll) C1{ FL:7 Fs:16 FL:16}



static void Test_BFu7ll_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu16ll, BFu7ll_BFu16s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu16s_BFu16s) C1{ FL:7 Fs:16 Fs:16}



static void Test_BFu7ll_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu16s, BFu7ll_BFu16s_BFu16s)
//============================================================================


struct  BFu7ll_BFu16s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu16s_BFu17i) C1{ FL:7 Fs:16 Fi:17}



static void Test_BFu7ll_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu17i, BFu7ll_BFu16s_BFu17i)
//============================================================================


struct  BFu7ll_BFu16s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu16s_BFu17ll) C1{ FL:7 Fs:16 FL:17}



static void Test_BFu7ll_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu17ll, BFu7ll_BFu16s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu16s_BFu1c) C1{ FL:7 Fs:16 Fc:1}



static void Test_BFu7ll_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu1c, BFu7ll_BFu16s_BFu1c)
//============================================================================


struct  BFu7ll_BFu16s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu16s_BFu1i) C1{ FL:7 Fs:16 Fi:1}



static void Test_BFu7ll_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu1i, BFu7ll_BFu16s_BFu1i)
//============================================================================


struct  BFu7ll_BFu16s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu16s_BFu1ll) C1{ FL:7 Fs:16 FL:1}



static void Test_BFu7ll_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu1ll, BFu7ll_BFu16s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu16s_BFu1s) C1{ FL:7 Fs:16 Fs:1}



static void Test_BFu7ll_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7ll_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu1s, BFu7ll_BFu16s_BFu1s)
//============================================================================


struct  BFu7ll_BFu16s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu16s_BFu31i) C1{ FL:7 Fs:16 Fi:31}



static void Test_BFu7ll_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu31i, BFu7ll_BFu16s_BFu31i)
//============================================================================


struct  BFu7ll_BFu16s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu16s_BFu31ll) C1{ FL:7 Fs:16 FL:31}



static void Test_BFu7ll_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu31ll, BFu7ll_BFu16s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu16s_BFu32i) C1{ FL:7 Fs:16 Fi:32}



static void Test_BFu7ll_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu32i, BFu7ll_BFu16s_BFu32i)
//============================================================================


struct  BFu7ll_BFu16s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu16s_BFu32ll) C1{ FL:7 Fs:16 FL:32}



static void Test_BFu7ll_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu32ll, BFu7ll_BFu16s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu16s_BFu33) C1{ FL:7 Fs:16 FL:33}



static void Test_BFu7ll_BFu16s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu33, BFu7ll_BFu16s_BFu33)
//============================================================================


struct  BFu7ll_BFu16s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu16s_BFu7c) C1{ FL:7 Fs:16 Fc:7}



static void Test_BFu7ll_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu7c, BFu7ll_BFu16s_BFu7c)
//============================================================================


struct  BFu7ll_BFu16s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu16s_BFu7i) C1{ FL:7 Fs:16 Fi:7}



static void Test_BFu7ll_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu7i, BFu7ll_BFu16s_BFu7i)
//============================================================================


struct  BFu7ll_BFu16s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu16s_BFu7ll) C1{ FL:7 Fs:16 FL:7}



static void Test_BFu7ll_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu7ll, BFu7ll_BFu16s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu16s_BFu7s) C1{ FL:7 Fs:16 Fs:7}



static void Test_BFu7ll_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu7s, BFu7ll_BFu16s_BFu7s)
//============================================================================


struct  BFu7ll_BFu16s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu16s_BFu8c) C1{ FL:7 Fs:16 Fc:8}



static void Test_BFu7ll_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu8c, BFu7ll_BFu16s_BFu8c)
//============================================================================


struct  BFu7ll_BFu16s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu16s_BFu8i) C1{ FL:7 Fs:16 Fi:8}



static void Test_BFu7ll_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu8i, BFu7ll_BFu16s_BFu8i)
//============================================================================


struct  BFu7ll_BFu16s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu16s_BFu8ll) C1{ FL:7 Fs:16 FL:8}



static void Test_BFu7ll_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu8ll, BFu7ll_BFu16s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu16s_BFu8s) C1{ FL:7 Fs:16 Fs:8}



static void Test_BFu7ll_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu8s, BFu7ll_BFu16s_BFu8s)
//============================================================================


struct  BFu7ll_BFu16s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu16s_BFu9i) C1{ FL:7 Fs:16 Fi:9}



static void Test_BFu7ll_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu9i, BFu7ll_BFu16s_BFu9i)
//============================================================================


struct  BFu7ll_BFu16s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu16s_BFu9ll) C1{ FL:7 Fs:16 FL:9}



static void Test_BFu7ll_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu9ll, BFu7ll_BFu16s_BFu9ll)
//============================================================================


struct  BFu7ll_BFu16s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu16s_BFu9s) C1{ FL:7 Fs:16 Fs:9}



static void Test_BFu7ll_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_BFu9s, BFu7ll_BFu16s_BFu9s)
//============================================================================


struct  BFu7ll_BFu16s_C  {
  __tsu64 v1:7;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu7ll_BFu16s_C) C1{ FL:7 Fs:16 Fc}



static void Test_BFu7ll_BFu16s_C()
{
  {
    init_simple_test("BFu7ll_BFu16s_C");
    static STRUCT_IF_C BFu7ll_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_C, BFu7ll_BFu16s_C)
//============================================================================


struct  BFu7ll_BFu16s_D  {
  __tsu64 v1:7;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu7ll_BFu16s_D) C1{ FL:7 Fs:16 FL}



static void Test_BFu7ll_BFu16s_D()
{
  {
    init_simple_test("BFu7ll_BFu16s_D");
    static STRUCT_IF_C BFu7ll_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_D, BFu7ll_BFu16s_D)
//============================================================================


struct  BFu7ll_BFu16s_F  {
  __tsu64 v1:7;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu7ll_BFu16s_F) C1{ FL:7 Fs:16 Fi}



static void Test_BFu7ll_BFu16s_F()
{
  {
    init_simple_test("BFu7ll_BFu16s_F");
    static STRUCT_IF_C BFu7ll_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_F, BFu7ll_BFu16s_F)
//============================================================================


struct  BFu7ll_BFu16s_I  {
  __tsu64 v1:7;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu7ll_BFu16s_I) C1{ FL:7 Fs:16 Fi}



static void Test_BFu7ll_BFu16s_I()
{
  {
    init_simple_test("BFu7ll_BFu16s_I");
    static STRUCT_IF_C BFu7ll_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_I, BFu7ll_BFu16s_I)
//============================================================================


struct  BFu7ll_BFu16s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu7ll_BFu16s_Ip) C1{ FL:7 Fs:16 Fp}



static void Test_BFu7ll_BFu16s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu16s_Ip");
    static STRUCT_IF_C BFu7ll_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Ip, BFu7ll_BFu16s_Ip)
//============================================================================


struct  BFu7ll_BFu16s_L  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu16s_L) C1{ FL:7 Fs:16 FL}



static void Test_BFu7ll_BFu16s_L()
{
  {
    init_simple_test("BFu7ll_BFu16s_L");
    static STRUCT_IF_C BFu7ll_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_L, BFu7ll_BFu16s_L)
//============================================================================


struct  BFu7ll_BFu16s_S  {
  __tsu64 v1:7;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu7ll_BFu16s_S) C1{ FL:7 Fs:16 Fs}



static void Test_BFu7ll_BFu16s_S()
{
  {
    init_simple_test("BFu7ll_BFu16s_S");
    static STRUCT_IF_C BFu7ll_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_S, BFu7ll_BFu16s_S)
//============================================================================


struct  BFu7ll_BFu16s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu16s_Uc) C1{ FL:7 Fs:16 Fc}



static void Test_BFu7ll_BFu16s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu16s_Uc");
    static STRUCT_IF_C BFu7ll_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Uc, BFu7ll_BFu16s_Uc)
//============================================================================


struct  BFu7ll_BFu16s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu16s_Ui) C1{ FL:7 Fs:16 Fi}



static void Test_BFu7ll_BFu16s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu16s_Ui");
    static STRUCT_IF_C BFu7ll_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Ui, BFu7ll_BFu16s_Ui)
//============================================================================


struct  BFu7ll_BFu16s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu16s_Ul) C1{ FL:7 Fs:16 FL}



static void Test_BFu7ll_BFu16s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu16s_Ul");
    static STRUCT_IF_C BFu7ll_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Ul, BFu7ll_BFu16s_Ul)
//============================================================================


struct  BFu7ll_BFu16s_Us  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu16s_Us) C1{ FL:7 Fs:16 Fs}



static void Test_BFu7ll_BFu16s_Us()
{
  {
    init_simple_test("BFu7ll_BFu16s_Us");
    static STRUCT_IF_C BFu7ll_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu16s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Us, BFu7ll_BFu16s_Us)
//============================================================================


struct  BFu7ll_BFu16s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu7ll_BFu16s_Vp) C1{ FL:7 Fs:16 Fp}



static void Test_BFu7ll_BFu16s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu16s_Vp");
    static STRUCT_IF_C BFu7ll_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu16s_Vp, BFu7ll_BFu16s_Vp)
//============================================================================


struct  BFu7ll_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu7ll_BFu17i) C1{ FL:7 Fi:17}



static void Test_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i, BFu7ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu17i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu17i_BFu15i) C1{ FL:7 Fi:17 Fi:15}



static void Test_BFu7ll_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu15i, BFu7ll_BFu17i_BFu15i)
//============================================================================


struct  BFu7ll_BFu17i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu17i_BFu15ll) C1{ FL:7 Fi:17 FL:15}



static void Test_BFu7ll_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu15ll, BFu7ll_BFu17i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu17i_BFu15s) C1{ FL:7 Fi:17 Fs:15}



static void Test_BFu7ll_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu15s, BFu7ll_BFu17i_BFu15s)
//============================================================================


struct  BFu7ll_BFu17i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu17i_BFu16i) C1{ FL:7 Fi:17 Fi:16}



static void Test_BFu7ll_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu16i, BFu7ll_BFu17i_BFu16i)
//============================================================================


struct  BFu7ll_BFu17i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu17i_BFu16ll) C1{ FL:7 Fi:17 FL:16}



static void Test_BFu7ll_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu16ll, BFu7ll_BFu17i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu17i_BFu16s) C1{ FL:7 Fi:17 Fs:16}



static void Test_BFu7ll_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu16s, BFu7ll_BFu17i_BFu16s)
//============================================================================


struct  BFu7ll_BFu17i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu17i_BFu17i) C1{ FL:7 Fi:17 Fi:17}



static void Test_BFu7ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu17i, BFu7ll_BFu17i_BFu17i)
//============================================================================


struct  BFu7ll_BFu17i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu17i_BFu17ll) C1{ FL:7 Fi:17 FL:17}



static void Test_BFu7ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu17ll, BFu7ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu17i_BFu1c) C1{ FL:7 Fi:17 Fc:1}



static void Test_BFu7ll_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu1c, BFu7ll_BFu17i_BFu1c)
//============================================================================


struct  BFu7ll_BFu17i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu17i_BFu1i) C1{ FL:7 Fi:17 Fi:1}



static void Test_BFu7ll_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu1i, BFu7ll_BFu17i_BFu1i)
//============================================================================


struct  BFu7ll_BFu17i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu17i_BFu1ll) C1{ FL:7 Fi:17 FL:1}



static void Test_BFu7ll_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu1ll, BFu7ll_BFu17i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu17i_BFu1s) C1{ FL:7 Fi:17 Fs:1}



static void Test_BFu7ll_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu1s, BFu7ll_BFu17i_BFu1s)
//============================================================================


struct  BFu7ll_BFu17i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu17i_BFu31i) C1{ FL:7 Fi:17 Fi:31}



static void Test_BFu7ll_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu31i, BFu7ll_BFu17i_BFu31i)
//============================================================================


struct  BFu7ll_BFu17i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu17i_BFu31ll) C1{ FL:7 Fi:17 FL:31}



static void Test_BFu7ll_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu31ll, BFu7ll_BFu17i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu17i_BFu32i) C1{ FL:7 Fi:17 Fi:32}



static void Test_BFu7ll_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu32i, BFu7ll_BFu17i_BFu32i)
//============================================================================


struct  BFu7ll_BFu17i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu17i_BFu32ll) C1{ FL:7 Fi:17 FL:32}



static void Test_BFu7ll_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu32ll, BFu7ll_BFu17i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu17i_BFu33) C1{ FL:7 Fi:17 FL:33}



static void Test_BFu7ll_BFu17i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu33, BFu7ll_BFu17i_BFu33)
//============================================================================


struct  BFu7ll_BFu17i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu17i_BFu7c) C1{ FL:7 Fi:17 Fc:7}



static void Test_BFu7ll_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu7c, BFu7ll_BFu17i_BFu7c)
//============================================================================


struct  BFu7ll_BFu17i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu17i_BFu7i) C1{ FL:7 Fi:17 Fi:7}



static void Test_BFu7ll_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu7i, BFu7ll_BFu17i_BFu7i)
//============================================================================


struct  BFu7ll_BFu17i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu17i_BFu7ll) C1{ FL:7 Fi:17 FL:7}



static void Test_BFu7ll_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu7ll, BFu7ll_BFu17i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu17i_BFu7s) C1{ FL:7 Fi:17 Fs:7}



static void Test_BFu7ll_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu7s, BFu7ll_BFu17i_BFu7s)
//============================================================================


struct  BFu7ll_BFu17i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu17i_BFu8c) C1{ FL:7 Fi:17 Fc:8}



static void Test_BFu7ll_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu8c, BFu7ll_BFu17i_BFu8c)
//============================================================================


struct  BFu7ll_BFu17i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu17i_BFu8i) C1{ FL:7 Fi:17 Fi:8}



static void Test_BFu7ll_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu8i, BFu7ll_BFu17i_BFu8i)
//============================================================================


struct  BFu7ll_BFu17i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu17i_BFu8ll) C1{ FL:7 Fi:17 FL:8}



static void Test_BFu7ll_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu8ll, BFu7ll_BFu17i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu17i_BFu8s) C1{ FL:7 Fi:17 Fs:8}



static void Test_BFu7ll_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu8s, BFu7ll_BFu17i_BFu8s)
//============================================================================


struct  BFu7ll_BFu17i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu17i_BFu9i) C1{ FL:7 Fi:17 Fi:9}



static void Test_BFu7ll_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu9i, BFu7ll_BFu17i_BFu9i)
//============================================================================


struct  BFu7ll_BFu17i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu17i_BFu9ll) C1{ FL:7 Fi:17 FL:9}



static void Test_BFu7ll_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu9ll, BFu7ll_BFu17i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu17i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu17i_BFu9s) C1{ FL:7 Fi:17 Fs:9}



static void Test_BFu7ll_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_BFu9s, BFu7ll_BFu17i_BFu9s)
//============================================================================


struct  BFu7ll_BFu17i_C  {
  __tsu64 v1:7;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu7ll_BFu17i_C) C1{ FL:7 Fi:17 Fc}



static void Test_BFu7ll_BFu17i_C()
{
  {
    init_simple_test("BFu7ll_BFu17i_C");
    static STRUCT_IF_C BFu7ll_BFu17i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_C, BFu7ll_BFu17i_C)
//============================================================================


struct  BFu7ll_BFu17i_D  {
  __tsu64 v1:7;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu7ll_BFu17i_D) C1{ FL:7 Fi:17 FL}



static void Test_BFu7ll_BFu17i_D()
{
  {
    init_simple_test("BFu7ll_BFu17i_D");
    static STRUCT_IF_C BFu7ll_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_D, BFu7ll_BFu17i_D)
//============================================================================


struct  BFu7ll_BFu17i_F  {
  __tsu64 v1:7;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu7ll_BFu17i_F) C1{ FL:7 Fi:17 Fi}



static void Test_BFu7ll_BFu17i_F()
{
  {
    init_simple_test("BFu7ll_BFu17i_F");
    static STRUCT_IF_C BFu7ll_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_F, BFu7ll_BFu17i_F)
//============================================================================


struct  BFu7ll_BFu17i_I  {
  __tsu64 v1:7;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu7ll_BFu17i_I) C1{ FL:7 Fi:17 Fi}



static void Test_BFu7ll_BFu17i_I()
{
  {
    init_simple_test("BFu7ll_BFu17i_I");
    static STRUCT_IF_C BFu7ll_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_I, BFu7ll_BFu17i_I)
//============================================================================


struct  BFu7ll_BFu17i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu7ll_BFu17i_Ip) C1{ FL:7 Fi:17 Fp}



static void Test_BFu7ll_BFu17i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu17i_Ip");
    static STRUCT_IF_C BFu7ll_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Ip, BFu7ll_BFu17i_Ip)
//============================================================================


struct  BFu7ll_BFu17i_L  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu17i_L) C1{ FL:7 Fi:17 FL}



static void Test_BFu7ll_BFu17i_L()
{
  {
    init_simple_test("BFu7ll_BFu17i_L");
    static STRUCT_IF_C BFu7ll_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_L, BFu7ll_BFu17i_L)
//============================================================================


struct  BFu7ll_BFu17i_S  {
  __tsu64 v1:7;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu7ll_BFu17i_S) C1{ FL:7 Fi:17 Fs}



static void Test_BFu7ll_BFu17i_S()
{
  {
    init_simple_test("BFu7ll_BFu17i_S");
    static STRUCT_IF_C BFu7ll_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_S, BFu7ll_BFu17i_S)
//============================================================================


struct  BFu7ll_BFu17i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu17i_Uc) C1{ FL:7 Fi:17 Fc}



static void Test_BFu7ll_BFu17i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu17i_Uc");
    static STRUCT_IF_C BFu7ll_BFu17i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Uc, BFu7ll_BFu17i_Uc)
//============================================================================


struct  BFu7ll_BFu17i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu17i_Ui) C1{ FL:7 Fi:17 Fi}



static void Test_BFu7ll_BFu17i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu17i_Ui");
    static STRUCT_IF_C BFu7ll_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Ui, BFu7ll_BFu17i_Ui)
//============================================================================


struct  BFu7ll_BFu17i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu17i_Ul) C1{ FL:7 Fi:17 FL}



static void Test_BFu7ll_BFu17i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu17i_Ul");
    static STRUCT_IF_C BFu7ll_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Ul, BFu7ll_BFu17i_Ul)
//============================================================================


struct  BFu7ll_BFu17i_Us  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu17i_Us) C1{ FL:7 Fi:17 Fs}



static void Test_BFu7ll_BFu17i_Us()
{
  {
    init_simple_test("BFu7ll_BFu17i_Us");
    static STRUCT_IF_C BFu7ll_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Us, BFu7ll_BFu17i_Us)
//============================================================================


struct  BFu7ll_BFu17i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu7ll_BFu17i_Vp) C1{ FL:7 Fi:17 Fp}



static void Test_BFu7ll_BFu17i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu17i_Vp");
    static STRUCT_IF_C BFu7ll_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17i_Vp, BFu7ll_BFu17i_Vp)
//============================================================================


struct  BFu7ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu7ll_BFu17ll) C1{ FL:7 FL:17}



static void Test_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll, BFu7ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu17ll_BFu15i) C1{ FL:7 FL:17 Fi:15}



static void Test_BFu7ll_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu15i, BFu7ll_BFu17ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu17ll_BFu15ll) C1{ FL:7 FL:17 FL:15}



static void Test_BFu7ll_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu15ll, BFu7ll_BFu17ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu17ll_BFu15s) C1{ FL:7 FL:17 Fs:15}



static void Test_BFu7ll_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu15s, BFu7ll_BFu17ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu17ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu17ll_BFu16i) C1{ FL:7 FL:17 Fi:16}



static void Test_BFu7ll_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu16i, BFu7ll_BFu17ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu17ll_BFu16ll) C1{ FL:7 FL:17 FL:16}



static void Test_BFu7ll_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu16ll, BFu7ll_BFu17ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu17ll_BFu16s) C1{ FL:7 FL:17 Fs:16}



static void Test_BFu7ll_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu16s, BFu7ll_BFu17ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu17ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu17ll_BFu17i) C1{ FL:7 FL:17 Fi:17}



static void Test_BFu7ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu17i, BFu7ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu17ll_BFu17ll) C1{ FL:7 FL:17 FL:17}



static void Test_BFu7ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu17ll, BFu7ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu17ll_BFu1c) C1{ FL:7 FL:17 Fc:1}



static void Test_BFu7ll_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu1c, BFu7ll_BFu17ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu17ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu17ll_BFu1i) C1{ FL:7 FL:17 Fi:1}



static void Test_BFu7ll_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu1i, BFu7ll_BFu17ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu17ll_BFu1ll) C1{ FL:7 FL:17 FL:1}



static void Test_BFu7ll_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu1ll, BFu7ll_BFu17ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu17ll_BFu1s) C1{ FL:7 FL:17 Fs:1}



static void Test_BFu7ll_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7ll_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu1s, BFu7ll_BFu17ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu17ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu17ll_BFu31i) C1{ FL:7 FL:17 Fi:31}



static void Test_BFu7ll_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu31i, BFu7ll_BFu17ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu17ll_BFu31ll) C1{ FL:7 FL:17 FL:31}



static void Test_BFu7ll_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu31ll, BFu7ll_BFu17ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu17ll_BFu32i) C1{ FL:7 FL:17 Fi:32}



static void Test_BFu7ll_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu32i, BFu7ll_BFu17ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu17ll_BFu32ll) C1{ FL:7 FL:17 FL:32}



static void Test_BFu7ll_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu32ll, BFu7ll_BFu17ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu17ll_BFu33) C1{ FL:7 FL:17 FL:33}



static void Test_BFu7ll_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu33, BFu7ll_BFu17ll_BFu33)
//============================================================================


struct  BFu7ll_BFu17ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu17ll_BFu7c) C1{ FL:7 FL:17 Fc:7}



static void Test_BFu7ll_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu7c, BFu7ll_BFu17ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu17ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu17ll_BFu7i) C1{ FL:7 FL:17 Fi:7}



static void Test_BFu7ll_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu7i, BFu7ll_BFu17ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu17ll_BFu7ll) C1{ FL:7 FL:17 FL:7}



static void Test_BFu7ll_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu7ll, BFu7ll_BFu17ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu17ll_BFu7s) C1{ FL:7 FL:17 Fs:7}



static void Test_BFu7ll_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu7s, BFu7ll_BFu17ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu17ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu17ll_BFu8c) C1{ FL:7 FL:17 Fc:8}



static void Test_BFu7ll_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu8c, BFu7ll_BFu17ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu17ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu17ll_BFu8i) C1{ FL:7 FL:17 Fi:8}



static void Test_BFu7ll_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu8i, BFu7ll_BFu17ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu17ll_BFu8ll) C1{ FL:7 FL:17 FL:8}



static void Test_BFu7ll_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu8ll, BFu7ll_BFu17ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu17ll_BFu8s) C1{ FL:7 FL:17 Fs:8}



static void Test_BFu7ll_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu8s, BFu7ll_BFu17ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu17ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu17ll_BFu9i) C1{ FL:7 FL:17 Fi:9}



static void Test_BFu7ll_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu9i, BFu7ll_BFu17ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu17ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu17ll_BFu9ll) C1{ FL:7 FL:17 FL:9}



static void Test_BFu7ll_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu9ll, BFu7ll_BFu17ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu17ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu17ll_BFu9s) C1{ FL:7 FL:17 Fs:9}



static void Test_BFu7ll_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_BFu9s, BFu7ll_BFu17ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu17ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu7ll_BFu17ll_C) C1{ FL:7 FL:17 Fc}



static void Test_BFu7ll_BFu17ll_C()
{
  {
    init_simple_test("BFu7ll_BFu17ll_C");
    static STRUCT_IF_C BFu7ll_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_C");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_C, BFu7ll_BFu17ll_C)
//============================================================================


struct  BFu7ll_BFu17ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu7ll_BFu17ll_D) C1{ FL:7 FL:17 FL}



static void Test_BFu7ll_BFu17ll_D()
{
  {
    init_simple_test("BFu7ll_BFu17ll_D");
    static STRUCT_IF_C BFu7ll_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_D, BFu7ll_BFu17ll_D)
//============================================================================


struct  BFu7ll_BFu17ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu7ll_BFu17ll_F) C1{ FL:7 FL:17 Fi}



static void Test_BFu7ll_BFu17ll_F()
{
  {
    init_simple_test("BFu7ll_BFu17ll_F");
    static STRUCT_IF_C BFu7ll_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_F, BFu7ll_BFu17ll_F)
//============================================================================


struct  BFu7ll_BFu17ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu7ll_BFu17ll_I) C1{ FL:7 FL:17 Fi}



static void Test_BFu7ll_BFu17ll_I()
{
  {
    init_simple_test("BFu7ll_BFu17ll_I");
    static STRUCT_IF_C BFu7ll_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_I, BFu7ll_BFu17ll_I)
//============================================================================


struct  BFu7ll_BFu17ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu7ll_BFu17ll_Ip) C1{ FL:7 FL:17 Fp}



static void Test_BFu7ll_BFu17ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Ip, BFu7ll_BFu17ll_Ip)
//============================================================================


struct  BFu7ll_BFu17ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu17ll_L) C1{ FL:7 FL:17 FL}



static void Test_BFu7ll_BFu17ll_L()
{
  {
    init_simple_test("BFu7ll_BFu17ll_L");
    static STRUCT_IF_C BFu7ll_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_L, BFu7ll_BFu17ll_L)
//============================================================================


struct  BFu7ll_BFu17ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu7ll_BFu17ll_S) C1{ FL:7 FL:17 Fs}



static void Test_BFu7ll_BFu17ll_S()
{
  {
    init_simple_test("BFu7ll_BFu17ll_S");
    static STRUCT_IF_C BFu7ll_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_S, BFu7ll_BFu17ll_S)
//============================================================================


struct  BFu7ll_BFu17ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu17ll_Uc) C1{ FL:7 FL:17 Fc}



static void Test_BFu7ll_BFu17ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7ll_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Uc, BFu7ll_BFu17ll_Uc)
//============================================================================


struct  BFu7ll_BFu17ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu17ll_Ui) C1{ FL:7 FL:17 Fi}



static void Test_BFu7ll_BFu17ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Ui, BFu7ll_BFu17ll_Ui)
//============================================================================


struct  BFu7ll_BFu17ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu17ll_Ul) C1{ FL:7 FL:17 FL}



static void Test_BFu7ll_BFu17ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Ul, BFu7ll_BFu17ll_Ul)
//============================================================================


struct  BFu7ll_BFu17ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu17ll_Us) C1{ FL:7 FL:17 Fs}



static void Test_BFu7ll_BFu17ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Us");
    static STRUCT_IF_C BFu7ll_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Us, BFu7ll_BFu17ll_Us)
//============================================================================


struct  BFu7ll_BFu17ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu7ll_BFu17ll_Vp) C1{ FL:7 FL:17 Fp}



static void Test_BFu7ll_BFu17ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu17ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu17ll_Vp, BFu7ll_BFu17ll_Vp)
//============================================================================


struct  BFu7ll_BFu1c  {
  __tsu64 v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu7ll_BFu1c) C1{ FL:7 Fc:1}



static void Test_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c, BFu7ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu1c_BFu15i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu1c_BFu15i) C1{ FL:7 Fc:1 Fi:15}



static void Test_BFu7ll_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu15i, BFu7ll_BFu1c_BFu15i)
//============================================================================


struct  BFu7ll_BFu1c_BFu15ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu1c_BFu15ll) C1{ FL:7 Fc:1 FL:15}



static void Test_BFu7ll_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu15ll, BFu7ll_BFu1c_BFu15ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu15s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu1c_BFu15s) C1{ FL:7 Fc:1 Fs:15}



static void Test_BFu7ll_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu15s, BFu7ll_BFu1c_BFu15s)
//============================================================================


struct  BFu7ll_BFu1c_BFu16i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu1c_BFu16i) C1{ FL:7 Fc:1 Fi:16}



static void Test_BFu7ll_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu16i, BFu7ll_BFu1c_BFu16i)
//============================================================================


struct  BFu7ll_BFu1c_BFu16ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu1c_BFu16ll) C1{ FL:7 Fc:1 FL:16}



static void Test_BFu7ll_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu16ll, BFu7ll_BFu1c_BFu16ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu16s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu1c_BFu16s) C1{ FL:7 Fc:1 Fs:16}



static void Test_BFu7ll_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu16s, BFu7ll_BFu1c_BFu16s)
//============================================================================


struct  BFu7ll_BFu1c_BFu17i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu1c_BFu17i) C1{ FL:7 Fc:1 Fi:17}



static void Test_BFu7ll_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu17i, BFu7ll_BFu1c_BFu17i)
//============================================================================


struct  BFu7ll_BFu1c_BFu17ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu1c_BFu17ll) C1{ FL:7 Fc:1 FL:17}



static void Test_BFu7ll_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu17ll, BFu7ll_BFu1c_BFu17ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu1c  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu1c_BFu1c) C1{ FL:7 Fc:1 Fc:1}



static void Test_BFu7ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu1c, BFu7ll_BFu1c_BFu1c)
//============================================================================


struct  BFu7ll_BFu1c_BFu1i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu1c_BFu1i) C1{ FL:7 Fc:1 Fi:1}



static void Test_BFu7ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu1i, BFu7ll_BFu1c_BFu1i)
//============================================================================


struct  BFu7ll_BFu1c_BFu1ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu1c_BFu1ll) C1{ FL:7 Fc:1 FL:1}



static void Test_BFu7ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu1ll, BFu7ll_BFu1c_BFu1ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu1s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu1c_BFu1s) C1{ FL:7 Fc:1 Fs:1}



static void Test_BFu7ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu1s, BFu7ll_BFu1c_BFu1s)
//============================================================================


struct  BFu7ll_BFu1c_BFu31i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu1c_BFu31i) C1{ FL:7 Fc:1 Fi:31}



static void Test_BFu7ll_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu31i, BFu7ll_BFu1c_BFu31i)
//============================================================================


struct  BFu7ll_BFu1c_BFu31ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu1c_BFu31ll) C1{ FL:7 Fc:1 FL:31}



static void Test_BFu7ll_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu31ll, BFu7ll_BFu1c_BFu31ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu32i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu1c_BFu32i) C1{ FL:7 Fc:1 Fi:32}



static void Test_BFu7ll_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu32i, BFu7ll_BFu1c_BFu32i)
//============================================================================


struct  BFu7ll_BFu1c_BFu32ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu1c_BFu32ll) C1{ FL:7 Fc:1 FL:32}



static void Test_BFu7ll_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu32ll, BFu7ll_BFu1c_BFu32ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu33  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu1c_BFu33) C1{ FL:7 Fc:1 FL:33}



static void Test_BFu7ll_BFu1c_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu33");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu33, BFu7ll_BFu1c_BFu33)
//============================================================================


struct  BFu7ll_BFu1c_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu1c_BFu7c) C1{ FL:7 Fc:1 Fc:7}



static void Test_BFu7ll_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu7c, BFu7ll_BFu1c_BFu7c)
//============================================================================


struct  BFu7ll_BFu1c_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu1c_BFu7i) C1{ FL:7 Fc:1 Fi:7}



static void Test_BFu7ll_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu7i, BFu7ll_BFu1c_BFu7i)
//============================================================================


struct  BFu7ll_BFu1c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu1c_BFu7ll) C1{ FL:7 Fc:1 FL:7}



static void Test_BFu7ll_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu7ll, BFu7ll_BFu1c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu1c_BFu7s) C1{ FL:7 Fc:1 Fs:7}



static void Test_BFu7ll_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu7s, BFu7ll_BFu1c_BFu7s)
//============================================================================


struct  BFu7ll_BFu1c_BFu8c  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu1c_BFu8c) C1{ FL:7 Fc:1 Fc:8}



static void Test_BFu7ll_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu8c, BFu7ll_BFu1c_BFu8c)
//============================================================================


struct  BFu7ll_BFu1c_BFu8i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu1c_BFu8i) C1{ FL:7 Fc:1 Fi:8}



static void Test_BFu7ll_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu8i, BFu7ll_BFu1c_BFu8i)
//============================================================================


struct  BFu7ll_BFu1c_BFu8ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu1c_BFu8ll) C1{ FL:7 Fc:1 FL:8}



static void Test_BFu7ll_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu8ll, BFu7ll_BFu1c_BFu8ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu8s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu1c_BFu8s) C1{ FL:7 Fc:1 Fs:8}



static void Test_BFu7ll_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu8s, BFu7ll_BFu1c_BFu8s)
//============================================================================


struct  BFu7ll_BFu1c_BFu9i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu1c_BFu9i) C1{ FL:7 Fc:1 Fi:9}



static void Test_BFu7ll_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu9i, BFu7ll_BFu1c_BFu9i)
//============================================================================


struct  BFu7ll_BFu1c_BFu9ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu1c_BFu9ll) C1{ FL:7 Fc:1 FL:9}



static void Test_BFu7ll_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu9ll, BFu7ll_BFu1c_BFu9ll)
//============================================================================


struct  BFu7ll_BFu1c_BFu9s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu1c_BFu9s) C1{ FL:7 Fc:1 Fs:9}



static void Test_BFu7ll_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu1c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_BFu9s, BFu7ll_BFu1c_BFu9s)
//============================================================================


struct  BFu7ll_BFu1c_C  {
  __tsu64 v1:7;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu7ll_BFu1c_C) C1{ FL:7 Fc:1 Fc}



static void Test_BFu7ll_BFu1c_C()
{
  {
    init_simple_test("BFu7ll_BFu1c_C");
    static STRUCT_IF_C BFu7ll_BFu1c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_C");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_C, BFu7ll_BFu1c_C)
//============================================================================


struct  BFu7ll_BFu1c_D  {
  __tsu64 v1:7;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu7ll_BFu1c_D) C1{ FL:7 Fc:1 FL}



static void Test_BFu7ll_BFu1c_D()
{
  {
    init_simple_test("BFu7ll_BFu1c_D");
    static STRUCT_IF_C BFu7ll_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_D, BFu7ll_BFu1c_D)
//============================================================================


struct  BFu7ll_BFu1c_F  {
  __tsu64 v1:7;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu7ll_BFu1c_F) C1{ FL:7 Fc:1 Fi}



static void Test_BFu7ll_BFu1c_F()
{
  {
    init_simple_test("BFu7ll_BFu1c_F");
    static STRUCT_IF_C BFu7ll_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_F, BFu7ll_BFu1c_F)
//============================================================================


struct  BFu7ll_BFu1c_I  {
  __tsu64 v1:7;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu7ll_BFu1c_I) C1{ FL:7 Fc:1 Fi}



static void Test_BFu7ll_BFu1c_I()
{
  {
    init_simple_test("BFu7ll_BFu1c_I");
    static STRUCT_IF_C BFu7ll_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_I, BFu7ll_BFu1c_I)
//============================================================================


struct  BFu7ll_BFu1c_Ip  {
  __tsu64 v1:7;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu7ll_BFu1c_Ip) C1{ FL:7 Fc:1 Fp}



static void Test_BFu7ll_BFu1c_Ip()
{
  {
    init_simple_test("BFu7ll_BFu1c_Ip");
    static STRUCT_IF_C BFu7ll_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Ip, BFu7ll_BFu1c_Ip)
//============================================================================


struct  BFu7ll_BFu1c_L  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu1c_L) C1{ FL:7 Fc:1 FL}



static void Test_BFu7ll_BFu1c_L()
{
  {
    init_simple_test("BFu7ll_BFu1c_L");
    static STRUCT_IF_C BFu7ll_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_L, BFu7ll_BFu1c_L)
//============================================================================


struct  BFu7ll_BFu1c_S  {
  __tsu64 v1:7;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu7ll_BFu1c_S) C1{ FL:7 Fc:1 Fs}



static void Test_BFu7ll_BFu1c_S()
{
  {
    init_simple_test("BFu7ll_BFu1c_S");
    static STRUCT_IF_C BFu7ll_BFu1c_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_S, BFu7ll_BFu1c_S)
//============================================================================


struct  BFu7ll_BFu1c_Uc  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu1c_Uc) C1{ FL:7 Fc:1 Fc}



static void Test_BFu7ll_BFu1c_Uc()
{
  {
    init_simple_test("BFu7ll_BFu1c_Uc");
    static STRUCT_IF_C BFu7ll_BFu1c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Uc");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Uc, BFu7ll_BFu1c_Uc)
//============================================================================


struct  BFu7ll_BFu1c_Ui  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu1c_Ui) C1{ FL:7 Fc:1 Fi}



static void Test_BFu7ll_BFu1c_Ui()
{
  {
    init_simple_test("BFu7ll_BFu1c_Ui");
    static STRUCT_IF_C BFu7ll_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Ui, BFu7ll_BFu1c_Ui)
//============================================================================


struct  BFu7ll_BFu1c_Ul  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu1c_Ul) C1{ FL:7 Fc:1 FL}



static void Test_BFu7ll_BFu1c_Ul()
{
  {
    init_simple_test("BFu7ll_BFu1c_Ul");
    static STRUCT_IF_C BFu7ll_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Ul, BFu7ll_BFu1c_Ul)
//============================================================================


struct  BFu7ll_BFu1c_Us  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu1c_Us) C1{ FL:7 Fc:1 Fs}



static void Test_BFu7ll_BFu1c_Us()
{
  {
    init_simple_test("BFu7ll_BFu1c_Us");
    static STRUCT_IF_C BFu7ll_BFu1c_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Us, BFu7ll_BFu1c_Us)
//============================================================================


struct  BFu7ll_BFu1c_Vp  {
  __tsu64 v1:7;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu7ll_BFu1c_Vp) C1{ FL:7 Fc:1 Fp}



static void Test_BFu7ll_BFu1c_Vp()
{
  {
    init_simple_test("BFu7ll_BFu1c_Vp");
    static STRUCT_IF_C BFu7ll_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1c_Vp, BFu7ll_BFu1c_Vp)
//============================================================================


struct  BFu7ll_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu7ll_BFu1i) C1{ FL:7 Fi:1}



static void Test_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i, BFu7ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu1i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu1i_BFu15i) C1{ FL:7 Fi:1 Fi:15}



static void Test_BFu7ll_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu15i, BFu7ll_BFu1i_BFu15i)
//============================================================================


struct  BFu7ll_BFu1i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu1i_BFu15ll) C1{ FL:7 Fi:1 FL:15}



static void Test_BFu7ll_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu15ll, BFu7ll_BFu1i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu1i_BFu15s) C1{ FL:7 Fi:1 Fs:15}



static void Test_BFu7ll_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu15s, BFu7ll_BFu1i_BFu15s)
//============================================================================


struct  BFu7ll_BFu1i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu1i_BFu16i) C1{ FL:7 Fi:1 Fi:16}



static void Test_BFu7ll_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu16i, BFu7ll_BFu1i_BFu16i)
//============================================================================


struct  BFu7ll_BFu1i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu1i_BFu16ll) C1{ FL:7 Fi:1 FL:16}



static void Test_BFu7ll_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu16ll, BFu7ll_BFu1i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu1i_BFu16s) C1{ FL:7 Fi:1 Fs:16}



static void Test_BFu7ll_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu16s, BFu7ll_BFu1i_BFu16s)
//============================================================================


struct  BFu7ll_BFu1i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu1i_BFu17i) C1{ FL:7 Fi:1 Fi:17}



static void Test_BFu7ll_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu17i, BFu7ll_BFu1i_BFu17i)
//============================================================================


struct  BFu7ll_BFu1i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu1i_BFu17ll) C1{ FL:7 Fi:1 FL:17}



static void Test_BFu7ll_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu17ll, BFu7ll_BFu1i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu1i_BFu1c) C1{ FL:7 Fi:1 Fc:1}



static void Test_BFu7ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu1c, BFu7ll_BFu1i_BFu1c)
//============================================================================


struct  BFu7ll_BFu1i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu1i_BFu1i) C1{ FL:7 Fi:1 Fi:1}



static void Test_BFu7ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu1i, BFu7ll_BFu1i_BFu1i)
//============================================================================


struct  BFu7ll_BFu1i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu1i_BFu1ll) C1{ FL:7 Fi:1 FL:1}



static void Test_BFu7ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu1ll, BFu7ll_BFu1i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu1i_BFu1s) C1{ FL:7 Fi:1 Fs:1}



static void Test_BFu7ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu1s, BFu7ll_BFu1i_BFu1s)
//============================================================================


struct  BFu7ll_BFu1i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu1i_BFu31i) C1{ FL:7 Fi:1 Fi:31}



static void Test_BFu7ll_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu31i, BFu7ll_BFu1i_BFu31i)
//============================================================================


struct  BFu7ll_BFu1i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu1i_BFu31ll) C1{ FL:7 Fi:1 FL:31}



static void Test_BFu7ll_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu31ll, BFu7ll_BFu1i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu1i_BFu32i) C1{ FL:7 Fi:1 Fi:32}



static void Test_BFu7ll_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu32i, BFu7ll_BFu1i_BFu32i)
//============================================================================


struct  BFu7ll_BFu1i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu1i_BFu32ll) C1{ FL:7 Fi:1 FL:32}



static void Test_BFu7ll_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu32ll, BFu7ll_BFu1i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu1i_BFu33) C1{ FL:7 Fi:1 FL:33}



static void Test_BFu7ll_BFu1i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu33, BFu7ll_BFu1i_BFu33)
//============================================================================


struct  BFu7ll_BFu1i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu1i_BFu7c) C1{ FL:7 Fi:1 Fc:7}



static void Test_BFu7ll_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu7c, BFu7ll_BFu1i_BFu7c)
//============================================================================


struct  BFu7ll_BFu1i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu1i_BFu7i) C1{ FL:7 Fi:1 Fi:7}



static void Test_BFu7ll_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu7i, BFu7ll_BFu1i_BFu7i)
//============================================================================


struct  BFu7ll_BFu1i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu1i_BFu7ll) C1{ FL:7 Fi:1 FL:7}



static void Test_BFu7ll_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu7ll, BFu7ll_BFu1i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu1i_BFu7s) C1{ FL:7 Fi:1 Fs:7}



static void Test_BFu7ll_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu7s, BFu7ll_BFu1i_BFu7s)
//============================================================================


struct  BFu7ll_BFu1i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu1i_BFu8c) C1{ FL:7 Fi:1 Fc:8}



static void Test_BFu7ll_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu8c, BFu7ll_BFu1i_BFu8c)
//============================================================================


struct  BFu7ll_BFu1i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu1i_BFu8i) C1{ FL:7 Fi:1 Fi:8}



static void Test_BFu7ll_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu8i, BFu7ll_BFu1i_BFu8i)
//============================================================================


struct  BFu7ll_BFu1i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu1i_BFu8ll) C1{ FL:7 Fi:1 FL:8}



static void Test_BFu7ll_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu8ll, BFu7ll_BFu1i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu1i_BFu8s) C1{ FL:7 Fi:1 Fs:8}



static void Test_BFu7ll_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu8s, BFu7ll_BFu1i_BFu8s)
//============================================================================


struct  BFu7ll_BFu1i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu1i_BFu9i) C1{ FL:7 Fi:1 Fi:9}



static void Test_BFu7ll_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu9i, BFu7ll_BFu1i_BFu9i)
//============================================================================


struct  BFu7ll_BFu1i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu1i_BFu9ll) C1{ FL:7 Fi:1 FL:9}



static void Test_BFu7ll_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu9ll, BFu7ll_BFu1i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu1i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu1i_BFu9s) C1{ FL:7 Fi:1 Fs:9}



static void Test_BFu7ll_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu1i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_BFu9s, BFu7ll_BFu1i_BFu9s)
//============================================================================


struct  BFu7ll_BFu1i_C  {
  __tsu64 v1:7;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu7ll_BFu1i_C) C1{ FL:7 Fi:1 Fc}



static void Test_BFu7ll_BFu1i_C()
{
  {
    init_simple_test("BFu7ll_BFu1i_C");
    static STRUCT_IF_C BFu7ll_BFu1i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_C");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_C, BFu7ll_BFu1i_C)
//============================================================================


struct  BFu7ll_BFu1i_D  {
  __tsu64 v1:7;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu7ll_BFu1i_D) C1{ FL:7 Fi:1 FL}



static void Test_BFu7ll_BFu1i_D()
{
  {
    init_simple_test("BFu7ll_BFu1i_D");
    static STRUCT_IF_C BFu7ll_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_D, BFu7ll_BFu1i_D)
//============================================================================


struct  BFu7ll_BFu1i_F  {
  __tsu64 v1:7;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu7ll_BFu1i_F) C1{ FL:7 Fi:1 Fi}



static void Test_BFu7ll_BFu1i_F()
{
  {
    init_simple_test("BFu7ll_BFu1i_F");
    static STRUCT_IF_C BFu7ll_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_F, BFu7ll_BFu1i_F)
//============================================================================


struct  BFu7ll_BFu1i_I  {
  __tsu64 v1:7;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu7ll_BFu1i_I) C1{ FL:7 Fi:1 Fi}



static void Test_BFu7ll_BFu1i_I()
{
  {
    init_simple_test("BFu7ll_BFu1i_I");
    static STRUCT_IF_C BFu7ll_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_I, BFu7ll_BFu1i_I)
//============================================================================


struct  BFu7ll_BFu1i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu7ll_BFu1i_Ip) C1{ FL:7 Fi:1 Fp}



static void Test_BFu7ll_BFu1i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu1i_Ip");
    static STRUCT_IF_C BFu7ll_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Ip, BFu7ll_BFu1i_Ip)
//============================================================================


struct  BFu7ll_BFu1i_L  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu1i_L) C1{ FL:7 Fi:1 FL}



static void Test_BFu7ll_BFu1i_L()
{
  {
    init_simple_test("BFu7ll_BFu1i_L");
    static STRUCT_IF_C BFu7ll_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_L, BFu7ll_BFu1i_L)
//============================================================================


struct  BFu7ll_BFu1i_S  {
  __tsu64 v1:7;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu7ll_BFu1i_S) C1{ FL:7 Fi:1 Fs}



static void Test_BFu7ll_BFu1i_S()
{
  {
    init_simple_test("BFu7ll_BFu1i_S");
    static STRUCT_IF_C BFu7ll_BFu1i_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_S, BFu7ll_BFu1i_S)
//============================================================================


struct  BFu7ll_BFu1i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu1i_Uc) C1{ FL:7 Fi:1 Fc}



static void Test_BFu7ll_BFu1i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu1i_Uc");
    static STRUCT_IF_C BFu7ll_BFu1i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Uc");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Uc, BFu7ll_BFu1i_Uc)
//============================================================================


struct  BFu7ll_BFu1i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu1i_Ui) C1{ FL:7 Fi:1 Fi}



static void Test_BFu7ll_BFu1i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu1i_Ui");
    static STRUCT_IF_C BFu7ll_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Ui, BFu7ll_BFu1i_Ui)
//============================================================================


struct  BFu7ll_BFu1i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu1i_Ul) C1{ FL:7 Fi:1 FL}



static void Test_BFu7ll_BFu1i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu1i_Ul");
    static STRUCT_IF_C BFu7ll_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Ul, BFu7ll_BFu1i_Ul)
//============================================================================


struct  BFu7ll_BFu1i_Us  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu1i_Us) C1{ FL:7 Fi:1 Fs}



static void Test_BFu7ll_BFu1i_Us()
{
  {
    init_simple_test("BFu7ll_BFu1i_Us");
    static STRUCT_IF_C BFu7ll_BFu1i_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Us, BFu7ll_BFu1i_Us)
//============================================================================


struct  BFu7ll_BFu1i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu7ll_BFu1i_Vp) C1{ FL:7 Fi:1 Fp}



static void Test_BFu7ll_BFu1i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu1i_Vp");
    static STRUCT_IF_C BFu7ll_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1i_Vp, BFu7ll_BFu1i_Vp)
//============================================================================


struct  BFu7ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu7ll_BFu1ll) C1{ FL:7 FL:1}



static void Test_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll, BFu7ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu1ll_BFu15i) C1{ FL:7 FL:1 Fi:15}



static void Test_BFu7ll_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu15i, BFu7ll_BFu1ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu1ll_BFu15ll) C1{ FL:7 FL:1 FL:15}



static void Test_BFu7ll_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu15ll, BFu7ll_BFu1ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu1ll_BFu15s) C1{ FL:7 FL:1 Fs:15}



static void Test_BFu7ll_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu15s, BFu7ll_BFu1ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu1ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu1ll_BFu16i) C1{ FL:7 FL:1 Fi:16}



static void Test_BFu7ll_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu16i, BFu7ll_BFu1ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu1ll_BFu16ll) C1{ FL:7 FL:1 FL:16}



static void Test_BFu7ll_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu16ll, BFu7ll_BFu1ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu1ll_BFu16s) C1{ FL:7 FL:1 Fs:16}



static void Test_BFu7ll_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu16s, BFu7ll_BFu1ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu1ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu1ll_BFu17i) C1{ FL:7 FL:1 Fi:17}



static void Test_BFu7ll_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu17i, BFu7ll_BFu1ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu1ll_BFu17ll) C1{ FL:7 FL:1 FL:17}



static void Test_BFu7ll_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu17ll, BFu7ll_BFu1ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu1ll_BFu1c) C1{ FL:7 FL:1 Fc:1}



static void Test_BFu7ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu1c, BFu7ll_BFu1ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu1ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu1ll_BFu1i) C1{ FL:7 FL:1 Fi:1}



static void Test_BFu7ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu1i, BFu7ll_BFu1ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu1ll_BFu1ll) C1{ FL:7 FL:1 FL:1}



static void Test_BFu7ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu1ll, BFu7ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu1ll_BFu1s) C1{ FL:7 FL:1 Fs:1}



static void Test_BFu7ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu1s, BFu7ll_BFu1ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu1ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu1ll_BFu31i) C1{ FL:7 FL:1 Fi:31}



static void Test_BFu7ll_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu31i, BFu7ll_BFu1ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu1ll_BFu31ll) C1{ FL:7 FL:1 FL:31}



static void Test_BFu7ll_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu31ll, BFu7ll_BFu1ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu1ll_BFu32i) C1{ FL:7 FL:1 Fi:32}



static void Test_BFu7ll_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu32i, BFu7ll_BFu1ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu1ll_BFu32ll) C1{ FL:7 FL:1 FL:32}



static void Test_BFu7ll_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu32ll, BFu7ll_BFu1ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu1ll_BFu33) C1{ FL:7 FL:1 FL:33}



static void Test_BFu7ll_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu33, BFu7ll_BFu1ll_BFu33)
//============================================================================


struct  BFu7ll_BFu1ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu1ll_BFu7c) C1{ FL:7 FL:1 Fc:7}



static void Test_BFu7ll_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu7c, BFu7ll_BFu1ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu1ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu1ll_BFu7i) C1{ FL:7 FL:1 Fi:7}



static void Test_BFu7ll_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu7i, BFu7ll_BFu1ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu1ll_BFu7ll) C1{ FL:7 FL:1 FL:7}



static void Test_BFu7ll_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu7ll, BFu7ll_BFu1ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu1ll_BFu7s) C1{ FL:7 FL:1 Fs:7}



static void Test_BFu7ll_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu7s, BFu7ll_BFu1ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu1ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu1ll_BFu8c) C1{ FL:7 FL:1 Fc:8}



static void Test_BFu7ll_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu8c, BFu7ll_BFu1ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu1ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu1ll_BFu8i) C1{ FL:7 FL:1 Fi:8}



static void Test_BFu7ll_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu8i, BFu7ll_BFu1ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu1ll_BFu8ll) C1{ FL:7 FL:1 FL:8}



static void Test_BFu7ll_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu8ll, BFu7ll_BFu1ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu1ll_BFu8s) C1{ FL:7 FL:1 Fs:8}



static void Test_BFu7ll_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu8s, BFu7ll_BFu1ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu1ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu1ll_BFu9i) C1{ FL:7 FL:1 Fi:9}



static void Test_BFu7ll_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu9i, BFu7ll_BFu1ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu1ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu1ll_BFu9ll) C1{ FL:7 FL:1 FL:9}



static void Test_BFu7ll_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu9ll, BFu7ll_BFu1ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu1ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu1ll_BFu9s) C1{ FL:7 FL:1 Fs:9}



static void Test_BFu7ll_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_BFu9s, BFu7ll_BFu1ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu1ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu7ll_BFu1ll_C) C1{ FL:7 FL:1 Fc}



static void Test_BFu7ll_BFu1ll_C()
{
  {
    init_simple_test("BFu7ll_BFu1ll_C");
    static STRUCT_IF_C BFu7ll_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_C");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_C, BFu7ll_BFu1ll_C)
//============================================================================


struct  BFu7ll_BFu1ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu7ll_BFu1ll_D) C1{ FL:7 FL:1 FL}



static void Test_BFu7ll_BFu1ll_D()
{
  {
    init_simple_test("BFu7ll_BFu1ll_D");
    static STRUCT_IF_C BFu7ll_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_D, BFu7ll_BFu1ll_D)
//============================================================================


struct  BFu7ll_BFu1ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu7ll_BFu1ll_F) C1{ FL:7 FL:1 Fi}



static void Test_BFu7ll_BFu1ll_F()
{
  {
    init_simple_test("BFu7ll_BFu1ll_F");
    static STRUCT_IF_C BFu7ll_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_F, BFu7ll_BFu1ll_F)
//============================================================================


struct  BFu7ll_BFu1ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu7ll_BFu1ll_I) C1{ FL:7 FL:1 Fi}



static void Test_BFu7ll_BFu1ll_I()
{
  {
    init_simple_test("BFu7ll_BFu1ll_I");
    static STRUCT_IF_C BFu7ll_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_I, BFu7ll_BFu1ll_I)
//============================================================================


struct  BFu7ll_BFu1ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu7ll_BFu1ll_Ip) C1{ FL:7 FL:1 Fp}



static void Test_BFu7ll_BFu1ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Ip, BFu7ll_BFu1ll_Ip)
//============================================================================


struct  BFu7ll_BFu1ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu1ll_L) C1{ FL:7 FL:1 FL}



static void Test_BFu7ll_BFu1ll_L()
{
  {
    init_simple_test("BFu7ll_BFu1ll_L");
    static STRUCT_IF_C BFu7ll_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_L, BFu7ll_BFu1ll_L)
//============================================================================


struct  BFu7ll_BFu1ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu7ll_BFu1ll_S) C1{ FL:7 FL:1 Fs}



static void Test_BFu7ll_BFu1ll_S()
{
  {
    init_simple_test("BFu7ll_BFu1ll_S");
    static STRUCT_IF_C BFu7ll_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_S, BFu7ll_BFu1ll_S)
//============================================================================


struct  BFu7ll_BFu1ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu1ll_Uc) C1{ FL:7 FL:1 Fc}



static void Test_BFu7ll_BFu1ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Uc");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Uc, BFu7ll_BFu1ll_Uc)
//============================================================================


struct  BFu7ll_BFu1ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu1ll_Ui) C1{ FL:7 FL:1 Fi}



static void Test_BFu7ll_BFu1ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Ui, BFu7ll_BFu1ll_Ui)
//============================================================================


struct  BFu7ll_BFu1ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu1ll_Ul) C1{ FL:7 FL:1 FL}



static void Test_BFu7ll_BFu1ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Ul, BFu7ll_BFu1ll_Ul)
//============================================================================


struct  BFu7ll_BFu1ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu1ll_Us) C1{ FL:7 FL:1 Fs}



static void Test_BFu7ll_BFu1ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Us");
    static STRUCT_IF_C BFu7ll_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Us, BFu7ll_BFu1ll_Us)
//============================================================================


struct  BFu7ll_BFu1ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu7ll_BFu1ll_Vp) C1{ FL:7 FL:1 Fp}



static void Test_BFu7ll_BFu1ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu1ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1ll_Vp, BFu7ll_BFu1ll_Vp)
//============================================================================


struct  BFu7ll_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu7ll_BFu1s) C1{ FL:7 Fs:1}



static void Test_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s, BFu7ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu1s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu1s_BFu15i) C1{ FL:7 Fs:1 Fi:15}



static void Test_BFu7ll_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu15i, BFu7ll_BFu1s_BFu15i)
//============================================================================


struct  BFu7ll_BFu1s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu1s_BFu15ll) C1{ FL:7 Fs:1 FL:15}



static void Test_BFu7ll_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu15ll, BFu7ll_BFu1s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu1s_BFu15s) C1{ FL:7 Fs:1 Fs:15}



static void Test_BFu7ll_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu15s, BFu7ll_BFu1s_BFu15s)
//============================================================================


struct  BFu7ll_BFu1s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu1s_BFu16i) C1{ FL:7 Fs:1 Fi:16}



static void Test_BFu7ll_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu16i, BFu7ll_BFu1s_BFu16i)
//============================================================================


struct  BFu7ll_BFu1s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu1s_BFu16ll) C1{ FL:7 Fs:1 FL:16}



static void Test_BFu7ll_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu16ll, BFu7ll_BFu1s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu1s_BFu16s) C1{ FL:7 Fs:1 Fs:16}



static void Test_BFu7ll_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu16s, BFu7ll_BFu1s_BFu16s)
//============================================================================


struct  BFu7ll_BFu1s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu1s_BFu17i) C1{ FL:7 Fs:1 Fi:17}



static void Test_BFu7ll_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu17i, BFu7ll_BFu1s_BFu17i)
//============================================================================


struct  BFu7ll_BFu1s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu1s_BFu17ll) C1{ FL:7 Fs:1 FL:17}



static void Test_BFu7ll_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu17ll, BFu7ll_BFu1s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu1s_BFu1c) C1{ FL:7 Fs:1 Fc:1}



static void Test_BFu7ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu1c, BFu7ll_BFu1s_BFu1c)
//============================================================================


struct  BFu7ll_BFu1s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu1s_BFu1i) C1{ FL:7 Fs:1 Fi:1}



static void Test_BFu7ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu1i, BFu7ll_BFu1s_BFu1i)
//============================================================================


struct  BFu7ll_BFu1s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu1s_BFu1ll) C1{ FL:7 Fs:1 FL:1}



static void Test_BFu7ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu1ll, BFu7ll_BFu1s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu1s_BFu1s) C1{ FL:7 Fs:1 Fs:1}



static void Test_BFu7ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu1s, BFu7ll_BFu1s_BFu1s)
//============================================================================


struct  BFu7ll_BFu1s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu1s_BFu31i) C1{ FL:7 Fs:1 Fi:31}



static void Test_BFu7ll_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu31i, BFu7ll_BFu1s_BFu31i)
//============================================================================


struct  BFu7ll_BFu1s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu1s_BFu31ll) C1{ FL:7 Fs:1 FL:31}



static void Test_BFu7ll_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu31ll, BFu7ll_BFu1s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu1s_BFu32i) C1{ FL:7 Fs:1 Fi:32}



static void Test_BFu7ll_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu32i, BFu7ll_BFu1s_BFu32i)
//============================================================================


struct  BFu7ll_BFu1s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu1s_BFu32ll) C1{ FL:7 Fs:1 FL:32}



static void Test_BFu7ll_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu32ll, BFu7ll_BFu1s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu1s_BFu33) C1{ FL:7 Fs:1 FL:33}



static void Test_BFu7ll_BFu1s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu33, BFu7ll_BFu1s_BFu33)
//============================================================================


struct  BFu7ll_BFu1s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu1s_BFu7c) C1{ FL:7 Fs:1 Fc:7}



static void Test_BFu7ll_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu7c, BFu7ll_BFu1s_BFu7c)
//============================================================================


struct  BFu7ll_BFu1s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu1s_BFu7i) C1{ FL:7 Fs:1 Fi:7}



static void Test_BFu7ll_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu7i, BFu7ll_BFu1s_BFu7i)
//============================================================================


struct  BFu7ll_BFu1s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu1s_BFu7ll) C1{ FL:7 Fs:1 FL:7}



static void Test_BFu7ll_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu7ll, BFu7ll_BFu1s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu1s_BFu7s) C1{ FL:7 Fs:1 Fs:7}



static void Test_BFu7ll_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu7s, BFu7ll_BFu1s_BFu7s)
//============================================================================


struct  BFu7ll_BFu1s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu1s_BFu8c) C1{ FL:7 Fs:1 Fc:8}



static void Test_BFu7ll_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu8c, BFu7ll_BFu1s_BFu8c)
//============================================================================


struct  BFu7ll_BFu1s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu1s_BFu8i) C1{ FL:7 Fs:1 Fi:8}



static void Test_BFu7ll_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu8i, BFu7ll_BFu1s_BFu8i)
//============================================================================


struct  BFu7ll_BFu1s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu1s_BFu8ll) C1{ FL:7 Fs:1 FL:8}



static void Test_BFu7ll_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu8ll, BFu7ll_BFu1s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu1s_BFu8s) C1{ FL:7 Fs:1 Fs:8}



static void Test_BFu7ll_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu8s, BFu7ll_BFu1s_BFu8s)
//============================================================================


struct  BFu7ll_BFu1s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu1s_BFu9i) C1{ FL:7 Fs:1 Fi:9}



static void Test_BFu7ll_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu9i, BFu7ll_BFu1s_BFu9i)
//============================================================================


struct  BFu7ll_BFu1s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu1s_BFu9ll) C1{ FL:7 Fs:1 FL:9}



static void Test_BFu7ll_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu9ll, BFu7ll_BFu1s_BFu9ll)
//============================================================================


struct  BFu7ll_BFu1s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu1s_BFu9s) C1{ FL:7 Fs:1 Fs:9}



static void Test_BFu7ll_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu1s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_BFu9s, BFu7ll_BFu1s_BFu9s)
//============================================================================


struct  BFu7ll_BFu1s_C  {
  __tsu64 v1:7;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu7ll_BFu1s_C) C1{ FL:7 Fs:1 Fc}



static void Test_BFu7ll_BFu1s_C()
{
  {
    init_simple_test("BFu7ll_BFu1s_C");
    static STRUCT_IF_C BFu7ll_BFu1s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_C");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_C, BFu7ll_BFu1s_C)
//============================================================================


struct  BFu7ll_BFu1s_D  {
  __tsu64 v1:7;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu7ll_BFu1s_D) C1{ FL:7 Fs:1 FL}



static void Test_BFu7ll_BFu1s_D()
{
  {
    init_simple_test("BFu7ll_BFu1s_D");
    static STRUCT_IF_C BFu7ll_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_D, BFu7ll_BFu1s_D)
//============================================================================


struct  BFu7ll_BFu1s_F  {
  __tsu64 v1:7;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu7ll_BFu1s_F) C1{ FL:7 Fs:1 Fi}



static void Test_BFu7ll_BFu1s_F()
{
  {
    init_simple_test("BFu7ll_BFu1s_F");
    static STRUCT_IF_C BFu7ll_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_F, BFu7ll_BFu1s_F)
//============================================================================


struct  BFu7ll_BFu1s_I  {
  __tsu64 v1:7;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu7ll_BFu1s_I) C1{ FL:7 Fs:1 Fi}



static void Test_BFu7ll_BFu1s_I()
{
  {
    init_simple_test("BFu7ll_BFu1s_I");
    static STRUCT_IF_C BFu7ll_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_I, BFu7ll_BFu1s_I)
//============================================================================


struct  BFu7ll_BFu1s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu7ll_BFu1s_Ip) C1{ FL:7 Fs:1 Fp}



static void Test_BFu7ll_BFu1s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu1s_Ip");
    static STRUCT_IF_C BFu7ll_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Ip, BFu7ll_BFu1s_Ip)
//============================================================================


struct  BFu7ll_BFu1s_L  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu1s_L) C1{ FL:7 Fs:1 FL}



static void Test_BFu7ll_BFu1s_L()
{
  {
    init_simple_test("BFu7ll_BFu1s_L");
    static STRUCT_IF_C BFu7ll_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_L, BFu7ll_BFu1s_L)
//============================================================================


struct  BFu7ll_BFu1s_S  {
  __tsu64 v1:7;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu7ll_BFu1s_S) C1{ FL:7 Fs:1 Fs}



static void Test_BFu7ll_BFu1s_S()
{
  {
    init_simple_test("BFu7ll_BFu1s_S");
    static STRUCT_IF_C BFu7ll_BFu1s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_S, BFu7ll_BFu1s_S)
//============================================================================


struct  BFu7ll_BFu1s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu1s_Uc) C1{ FL:7 Fs:1 Fc}



static void Test_BFu7ll_BFu1s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu1s_Uc");
    static STRUCT_IF_C BFu7ll_BFu1s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Uc");
    check_field_offset(lv, v3, 1, "BFu7ll_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Uc, BFu7ll_BFu1s_Uc)
//============================================================================


struct  BFu7ll_BFu1s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu1s_Ui) C1{ FL:7 Fs:1 Fi}



static void Test_BFu7ll_BFu1s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu1s_Ui");
    static STRUCT_IF_C BFu7ll_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu1s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Ui, BFu7ll_BFu1s_Ui)
//============================================================================


struct  BFu7ll_BFu1s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu1s_Ul) C1{ FL:7 Fs:1 FL}



static void Test_BFu7ll_BFu1s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu1s_Ul");
    static STRUCT_IF_C BFu7ll_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Ul, BFu7ll_BFu1s_Ul)
//============================================================================


struct  BFu7ll_BFu1s_Us  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu1s_Us) C1{ FL:7 Fs:1 Fs}



static void Test_BFu7ll_BFu1s_Us()
{
  {
    init_simple_test("BFu7ll_BFu1s_Us");
    static STRUCT_IF_C BFu7ll_BFu1s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Us, BFu7ll_BFu1s_Us)
//============================================================================


struct  BFu7ll_BFu1s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu7ll_BFu1s_Vp) C1{ FL:7 Fs:1 Fp}



static void Test_BFu7ll_BFu1s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu1s_Vp");
    static STRUCT_IF_C BFu7ll_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu1s_Vp, BFu7ll_BFu1s_Vp)
//============================================================================


struct  BFu7ll_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu7ll_BFu31i) C1{ FL:7 Fi:31}



static void Test_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i, BFu7ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu31i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu31i_BFu15i) C1{ FL:7 Fi:31 Fi:15}



static void Test_BFu7ll_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu15i, BFu7ll_BFu31i_BFu15i)
//============================================================================


struct  BFu7ll_BFu31i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu31i_BFu15ll) C1{ FL:7 Fi:31 FL:15}



static void Test_BFu7ll_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu7ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu7ll_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu15ll, BFu7ll_BFu31i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu31i_BFu15s) C1{ FL:7 Fi:31 Fs:15}



static void Test_BFu7ll_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu15s, BFu7ll_BFu31i_BFu15s)
//============================================================================


struct  BFu7ll_BFu31i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu31i_BFu16i) C1{ FL:7 Fi:31 Fi:16}



static void Test_BFu7ll_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu16i, BFu7ll_BFu31i_BFu16i)
//============================================================================


struct  BFu7ll_BFu31i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu31i_BFu16ll) C1{ FL:7 Fi:31 FL:16}



static void Test_BFu7ll_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu7ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu7ll_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu16ll, BFu7ll_BFu31i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu31i_BFu16s) C1{ FL:7 Fi:31 Fs:16}



static void Test_BFu7ll_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu16s, BFu7ll_BFu31i_BFu16s)
//============================================================================


struct  BFu7ll_BFu31i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu31i_BFu17i) C1{ FL:7 Fi:31 Fi:17}



static void Test_BFu7ll_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu17i, BFu7ll_BFu31i_BFu17i)
//============================================================================


struct  BFu7ll_BFu31i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu31i_BFu17ll) C1{ FL:7 Fi:31 FL:17}



static void Test_BFu7ll_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu7ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu7ll_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu17ll, BFu7ll_BFu31i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu31i_BFu1c) C1{ FL:7 Fi:31 Fc:1}



static void Test_BFu7ll_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7ll_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu1c, BFu7ll_BFu31i_BFu1c)
//============================================================================


struct  BFu7ll_BFu31i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu31i_BFu1i) C1{ FL:7 Fi:31 Fi:1}



static void Test_BFu7ll_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7ll_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu1i, BFu7ll_BFu31i_BFu1i)
//============================================================================


struct  BFu7ll_BFu31i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu31i_BFu1ll) C1{ FL:7 Fi:31 FL:1}



static void Test_BFu7ll_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7ll_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu1ll, BFu7ll_BFu31i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu31i_BFu1s) C1{ FL:7 Fi:31 Fs:1}



static void Test_BFu7ll_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7ll_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu1s, BFu7ll_BFu31i_BFu1s)
//============================================================================


struct  BFu7ll_BFu31i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu31i_BFu31i) C1{ FL:7 Fi:31 Fi:31}



static void Test_BFu7ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu31i, BFu7ll_BFu31i_BFu31i)
//============================================================================


struct  BFu7ll_BFu31i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu31i_BFu31ll) C1{ FL:7 Fi:31 FL:31}



static void Test_BFu7ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu7ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu31ll, BFu7ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu31i_BFu32i) C1{ FL:7 Fi:31 Fi:32}



static void Test_BFu7ll_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu32i, BFu7ll_BFu31i_BFu32i)
//============================================================================


struct  BFu7ll_BFu31i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu31i_BFu32ll) C1{ FL:7 Fi:31 FL:32}



static void Test_BFu7ll_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu7ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7ll_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu32ll, BFu7ll_BFu31i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu31i_BFu33) C1{ FL:7 Fi:31 FL:33}



static void Test_BFu7ll_BFu31i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu7ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7ll_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu33, BFu7ll_BFu31i_BFu33)
//============================================================================


struct  BFu7ll_BFu31i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu31i_BFu7c) C1{ FL:7 Fi:31 Fc:7}



static void Test_BFu7ll_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu7c, BFu7ll_BFu31i_BFu7c)
//============================================================================


struct  BFu7ll_BFu31i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu31i_BFu7i) C1{ FL:7 Fi:31 Fi:7}



static void Test_BFu7ll_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu7i, BFu7ll_BFu31i_BFu7i)
//============================================================================


struct  BFu7ll_BFu31i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu31i_BFu7ll) C1{ FL:7 Fi:31 FL:7}



static void Test_BFu7ll_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu7ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu7ll, BFu7ll_BFu31i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu31i_BFu7s) C1{ FL:7 Fi:31 Fs:7}



static void Test_BFu7ll_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu7s, BFu7ll_BFu31i_BFu7s)
//============================================================================


struct  BFu7ll_BFu31i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu31i_BFu8c) C1{ FL:7 Fi:31 Fc:8}



static void Test_BFu7ll_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu8c, BFu7ll_BFu31i_BFu8c)
//============================================================================


struct  BFu7ll_BFu31i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu31i_BFu8i) C1{ FL:7 Fi:31 Fi:8}



static void Test_BFu7ll_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu8i, BFu7ll_BFu31i_BFu8i)
//============================================================================


struct  BFu7ll_BFu31i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu31i_BFu8ll) C1{ FL:7 Fi:31 FL:8}



static void Test_BFu7ll_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu7ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu7ll_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu8ll, BFu7ll_BFu31i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu31i_BFu8s) C1{ FL:7 Fi:31 Fs:8}



static void Test_BFu7ll_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu8s, BFu7ll_BFu31i_BFu8s)
//============================================================================


struct  BFu7ll_BFu31i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu31i_BFu9i) C1{ FL:7 Fi:31 Fi:9}



static void Test_BFu7ll_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu9i, BFu7ll_BFu31i_BFu9i)
//============================================================================


struct  BFu7ll_BFu31i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu31i_BFu9ll) C1{ FL:7 Fi:31 FL:9}



static void Test_BFu7ll_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu7ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu7ll_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu9ll, BFu7ll_BFu31i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu31i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu31i_BFu9s) C1{ FL:7 Fi:31 Fs:9}



static void Test_BFu7ll_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu31i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_BFu9s, BFu7ll_BFu31i_BFu9s)
//============================================================================


struct  BFu7ll_BFu31i_C  {
  __tsu64 v1:7;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu7ll_BFu31i_C) C1{ FL:7 Fi:31 Fc}



static void Test_BFu7ll_BFu31i_C()
{
  {
    init_simple_test("BFu7ll_BFu31i_C");
    static STRUCT_IF_C BFu7ll_BFu31i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_C, BFu7ll_BFu31i_C)
//============================================================================


struct  BFu7ll_BFu31i_D  {
  __tsu64 v1:7;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu7ll_BFu31i_D) C1{ FL:7 Fi:31 FL}



static void Test_BFu7ll_BFu31i_D()
{
  {
    init_simple_test("BFu7ll_BFu31i_D");
    static STRUCT_IF_C BFu7ll_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_D, BFu7ll_BFu31i_D)
//============================================================================


struct  BFu7ll_BFu31i_F  {
  __tsu64 v1:7;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu7ll_BFu31i_F) C1{ FL:7 Fi:31 Fi}



static void Test_BFu7ll_BFu31i_F()
{
  {
    init_simple_test("BFu7ll_BFu31i_F");
    static STRUCT_IF_C BFu7ll_BFu31i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_F, BFu7ll_BFu31i_F)
//============================================================================


struct  BFu7ll_BFu31i_I  {
  __tsu64 v1:7;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu7ll_BFu31i_I) C1{ FL:7 Fi:31 Fi}



static void Test_BFu7ll_BFu31i_I()
{
  {
    init_simple_test("BFu7ll_BFu31i_I");
    static STRUCT_IF_C BFu7ll_BFu31i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_I, BFu7ll_BFu31i_I)
//============================================================================


struct  BFu7ll_BFu31i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu7ll_BFu31i_Ip) C1{ FL:7 Fi:31 Fp}



static void Test_BFu7ll_BFu31i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu31i_Ip");
    static STRUCT_IF_C BFu7ll_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Ip, BFu7ll_BFu31i_Ip)
//============================================================================


struct  BFu7ll_BFu31i_L  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu31i_L) C1{ FL:7 Fi:31 FL}



static void Test_BFu7ll_BFu31i_L()
{
  {
    init_simple_test("BFu7ll_BFu31i_L");
    static STRUCT_IF_C BFu7ll_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_L, BFu7ll_BFu31i_L)
//============================================================================


struct  BFu7ll_BFu31i_S  {
  __tsu64 v1:7;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu7ll_BFu31i_S) C1{ FL:7 Fi:31 Fs}



static void Test_BFu7ll_BFu31i_S()
{
  {
    init_simple_test("BFu7ll_BFu31i_S");
    static STRUCT_IF_C BFu7ll_BFu31i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_S, BFu7ll_BFu31i_S)
//============================================================================


struct  BFu7ll_BFu31i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu31i_Uc) C1{ FL:7 Fi:31 Fc}



static void Test_BFu7ll_BFu31i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu31i_Uc");
    static STRUCT_IF_C BFu7ll_BFu31i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Uc, BFu7ll_BFu31i_Uc)
//============================================================================


struct  BFu7ll_BFu31i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu31i_Ui) C1{ FL:7 Fi:31 Fi}



static void Test_BFu7ll_BFu31i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu31i_Ui");
    static STRUCT_IF_C BFu7ll_BFu31i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Ui, BFu7ll_BFu31i_Ui)
//============================================================================


struct  BFu7ll_BFu31i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu31i_Ul) C1{ FL:7 Fi:31 FL}



static void Test_BFu7ll_BFu31i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu31i_Ul");
    static STRUCT_IF_C BFu7ll_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Ul, BFu7ll_BFu31i_Ul)
//============================================================================


struct  BFu7ll_BFu31i_Us  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu31i_Us) C1{ FL:7 Fi:31 Fs}



static void Test_BFu7ll_BFu31i_Us()
{
  {
    init_simple_test("BFu7ll_BFu31i_Us");
    static STRUCT_IF_C BFu7ll_BFu31i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Us, BFu7ll_BFu31i_Us)
//============================================================================


struct  BFu7ll_BFu31i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu7ll_BFu31i_Vp) C1{ FL:7 Fi:31 Fp}



static void Test_BFu7ll_BFu31i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu31i_Vp");
    static STRUCT_IF_C BFu7ll_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31i_Vp, BFu7ll_BFu31i_Vp)
//============================================================================


struct  BFu7ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu7ll_BFu31ll) C1{ FL:7 FL:31}



static void Test_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll, BFu7ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu31ll_BFu15i) C1{ FL:7 FL:31 Fi:15}



static void Test_BFu7ll_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu15i, BFu7ll_BFu31ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu31ll_BFu15ll) C1{ FL:7 FL:31 FL:15}



static void Test_BFu7ll_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu15ll, BFu7ll_BFu31ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu31ll_BFu15s) C1{ FL:7 FL:31 Fs:15}



static void Test_BFu7ll_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu15s, BFu7ll_BFu31ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu31ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu31ll_BFu16i) C1{ FL:7 FL:31 Fi:16}



static void Test_BFu7ll_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu16i, BFu7ll_BFu31ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu31ll_BFu16ll) C1{ FL:7 FL:31 FL:16}



static void Test_BFu7ll_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu16ll, BFu7ll_BFu31ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu31ll_BFu16s) C1{ FL:7 FL:31 Fs:16}



static void Test_BFu7ll_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu16s, BFu7ll_BFu31ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu31ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu31ll_BFu17i) C1{ FL:7 FL:31 Fi:17}



static void Test_BFu7ll_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu17i, BFu7ll_BFu31ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu31ll_BFu17ll) C1{ FL:7 FL:31 FL:17}



static void Test_BFu7ll_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu17ll, BFu7ll_BFu31ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu31ll_BFu1c) C1{ FL:7 FL:31 Fc:1}



static void Test_BFu7ll_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7ll_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu1c, BFu7ll_BFu31ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu31ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu31ll_BFu1i) C1{ FL:7 FL:31 Fi:1}



static void Test_BFu7ll_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7ll_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu1i, BFu7ll_BFu31ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu31ll_BFu1ll) C1{ FL:7 FL:31 FL:1}



static void Test_BFu7ll_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7ll_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu1ll, BFu7ll_BFu31ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu31ll_BFu1s) C1{ FL:7 FL:31 Fs:1}



static void Test_BFu7ll_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7ll_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu1s, BFu7ll_BFu31ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu31ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu31ll_BFu31i) C1{ FL:7 FL:31 Fi:31}



static void Test_BFu7ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu31i, BFu7ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu31ll_BFu31ll) C1{ FL:7 FL:31 FL:31}



static void Test_BFu7ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, 1, "BFu7ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu31ll, BFu7ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu31ll_BFu32i) C1{ FL:7 FL:31 Fi:32}



static void Test_BFu7ll_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu32i, BFu7ll_BFu31ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu31ll_BFu32ll) C1{ FL:7 FL:31 FL:32}



static void Test_BFu7ll_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, 1, "BFu7ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu7ll_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu32ll, BFu7ll_BFu31ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu31ll_BFu33) C1{ FL:7 FL:31 FL:33}



static void Test_BFu7ll_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, 1, "BFu7ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu7ll_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu33, BFu7ll_BFu31ll_BFu33)
//============================================================================


struct  BFu7ll_BFu31ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu31ll_BFu7c) C1{ FL:7 FL:31 Fc:7}



static void Test_BFu7ll_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu7c, BFu7ll_BFu31ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu31ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu31ll_BFu7i) C1{ FL:7 FL:31 Fi:7}



static void Test_BFu7ll_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu7i, BFu7ll_BFu31ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu31ll_BFu7ll) C1{ FL:7 FL:31 FL:7}



static void Test_BFu7ll_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu7ll, BFu7ll_BFu31ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu31ll_BFu7s) C1{ FL:7 FL:31 Fs:7}



static void Test_BFu7ll_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu7s, BFu7ll_BFu31ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu31ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu31ll_BFu8c) C1{ FL:7 FL:31 Fc:8}



static void Test_BFu7ll_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu8c, BFu7ll_BFu31ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu31ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu31ll_BFu8i) C1{ FL:7 FL:31 Fi:8}



static void Test_BFu7ll_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu8i, BFu7ll_BFu31ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu31ll_BFu8ll) C1{ FL:7 FL:31 FL:8}



static void Test_BFu7ll_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu8ll, BFu7ll_BFu31ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu31ll_BFu8s) C1{ FL:7 FL:31 Fs:8}



static void Test_BFu7ll_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu8s, BFu7ll_BFu31ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu31ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu31ll_BFu9i) C1{ FL:7 FL:31 Fi:9}



static void Test_BFu7ll_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu9i, BFu7ll_BFu31ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu31ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu31ll_BFu9ll) C1{ FL:7 FL:31 FL:9}



static void Test_BFu7ll_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu9ll, BFu7ll_BFu31ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu31ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu31ll_BFu9s) C1{ FL:7 FL:31 Fs:9}



static void Test_BFu7ll_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_BFu9s, BFu7ll_BFu31ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu31ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu7ll_BFu31ll_C) C1{ FL:7 FL:31 Fc}



static void Test_BFu7ll_BFu31ll_C()
{
  {
    init_simple_test("BFu7ll_BFu31ll_C");
    static STRUCT_IF_C BFu7ll_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_C");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_C, BFu7ll_BFu31ll_C)
//============================================================================


struct  BFu7ll_BFu31ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu7ll_BFu31ll_D) C1{ FL:7 FL:31 FL}



static void Test_BFu7ll_BFu31ll_D()
{
  {
    init_simple_test("BFu7ll_BFu31ll_D");
    static STRUCT_IF_C BFu7ll_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_D, BFu7ll_BFu31ll_D)
//============================================================================


struct  BFu7ll_BFu31ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu7ll_BFu31ll_F) C1{ FL:7 FL:31 Fi}



static void Test_BFu7ll_BFu31ll_F()
{
  {
    init_simple_test("BFu7ll_BFu31ll_F");
    static STRUCT_IF_C BFu7ll_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_F, BFu7ll_BFu31ll_F)
//============================================================================


struct  BFu7ll_BFu31ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu7ll_BFu31ll_I) C1{ FL:7 FL:31 Fi}



static void Test_BFu7ll_BFu31ll_I()
{
  {
    init_simple_test("BFu7ll_BFu31ll_I");
    static STRUCT_IF_C BFu7ll_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_I, BFu7ll_BFu31ll_I)
//============================================================================


struct  BFu7ll_BFu31ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu7ll_BFu31ll_Ip) C1{ FL:7 FL:31 Fp}



static void Test_BFu7ll_BFu31ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Ip, BFu7ll_BFu31ll_Ip)
//============================================================================


struct  BFu7ll_BFu31ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu31ll_L) C1{ FL:7 FL:31 FL}



static void Test_BFu7ll_BFu31ll_L()
{
  {
    init_simple_test("BFu7ll_BFu31ll_L");
    static STRUCT_IF_C BFu7ll_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_L, BFu7ll_BFu31ll_L)
//============================================================================


struct  BFu7ll_BFu31ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu7ll_BFu31ll_S) C1{ FL:7 FL:31 Fs}



static void Test_BFu7ll_BFu31ll_S()
{
  {
    init_simple_test("BFu7ll_BFu31ll_S");
    static STRUCT_IF_C BFu7ll_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_S, BFu7ll_BFu31ll_S)
//============================================================================


struct  BFu7ll_BFu31ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu31ll_Uc) C1{ FL:7 FL:31 Fc}



static void Test_BFu7ll_BFu31ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Uc, BFu7ll_BFu31ll_Uc)
//============================================================================


struct  BFu7ll_BFu31ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu31ll_Ui) C1{ FL:7 FL:31 Fi}



static void Test_BFu7ll_BFu31ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Ui, BFu7ll_BFu31ll_Ui)
//============================================================================


struct  BFu7ll_BFu31ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu31ll_Ul) C1{ FL:7 FL:31 FL}



static void Test_BFu7ll_BFu31ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Ul, BFu7ll_BFu31ll_Ul)
//============================================================================


struct  BFu7ll_BFu31ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu31ll_Us) C1{ FL:7 FL:31 Fs}



static void Test_BFu7ll_BFu31ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Us");
    static STRUCT_IF_C BFu7ll_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Us, BFu7ll_BFu31ll_Us)
//============================================================================


struct  BFu7ll_BFu31ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu7ll_BFu31ll_Vp) C1{ FL:7 FL:31 Fp}



static void Test_BFu7ll_BFu31ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu31ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu31ll_Vp, BFu7ll_BFu31ll_Vp)
//============================================================================


struct  BFu7ll_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu7ll_BFu32i) C1{ FL:7 Fi:32}



static void Test_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i, BFu7ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu32i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu32i_BFu15i) C1{ FL:7 Fi:32 Fi:15}



static void Test_BFu7ll_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu15i, BFu7ll_BFu32i_BFu15i)
//============================================================================


struct  BFu7ll_BFu32i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu32i_BFu15ll) C1{ FL:7 Fi:32 FL:15}



static void Test_BFu7ll_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu15ll, BFu7ll_BFu32i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu32i_BFu15s) C1{ FL:7 Fi:32 Fs:15}



static void Test_BFu7ll_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu15s, BFu7ll_BFu32i_BFu15s)
//============================================================================


struct  BFu7ll_BFu32i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu32i_BFu16i) C1{ FL:7 Fi:32 Fi:16}



static void Test_BFu7ll_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu16i, BFu7ll_BFu32i_BFu16i)
//============================================================================


struct  BFu7ll_BFu32i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu32i_BFu16ll) C1{ FL:7 Fi:32 FL:16}



static void Test_BFu7ll_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu16ll, BFu7ll_BFu32i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu32i_BFu16s) C1{ FL:7 Fi:32 Fs:16}



static void Test_BFu7ll_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu16s, BFu7ll_BFu32i_BFu16s)
//============================================================================


struct  BFu7ll_BFu32i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu32i_BFu17i) C1{ FL:7 Fi:32 Fi:17}



static void Test_BFu7ll_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu17i, BFu7ll_BFu32i_BFu17i)
//============================================================================


struct  BFu7ll_BFu32i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu32i_BFu17ll) C1{ FL:7 Fi:32 FL:17}



static void Test_BFu7ll_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu17ll, BFu7ll_BFu32i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu32i_BFu1c) C1{ FL:7 Fi:32 Fc:1}



static void Test_BFu7ll_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu1c, BFu7ll_BFu32i_BFu1c)
//============================================================================


struct  BFu7ll_BFu32i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu32i_BFu1i) C1{ FL:7 Fi:32 Fi:1}



static void Test_BFu7ll_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu1i, BFu7ll_BFu32i_BFu1i)
//============================================================================


struct  BFu7ll_BFu32i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu32i_BFu1ll) C1{ FL:7 Fi:32 FL:1}



static void Test_BFu7ll_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu1ll, BFu7ll_BFu32i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu32i_BFu1s) C1{ FL:7 Fi:32 Fs:1}



static void Test_BFu7ll_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7ll_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu1s, BFu7ll_BFu32i_BFu1s)
//============================================================================


struct  BFu7ll_BFu32i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu32i_BFu31i) C1{ FL:7 Fi:32 Fi:31}



static void Test_BFu7ll_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu31i, BFu7ll_BFu32i_BFu31i)
//============================================================================


struct  BFu7ll_BFu32i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu32i_BFu31ll) C1{ FL:7 Fi:32 FL:31}



static void Test_BFu7ll_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu31ll, BFu7ll_BFu32i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu32i_BFu32i) C1{ FL:7 Fi:32 Fi:32}



static void Test_BFu7ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu32i, BFu7ll_BFu32i_BFu32i)
//============================================================================


struct  BFu7ll_BFu32i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu32i_BFu32ll) C1{ FL:7 Fi:32 FL:32}



static void Test_BFu7ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu32ll, BFu7ll_BFu32i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu32i_BFu33) C1{ FL:7 Fi:32 FL:33}



static void Test_BFu7ll_BFu32i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu33, BFu7ll_BFu32i_BFu33)
//============================================================================


struct  BFu7ll_BFu32i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu32i_BFu7c) C1{ FL:7 Fi:32 Fc:7}



static void Test_BFu7ll_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu7c, BFu7ll_BFu32i_BFu7c)
//============================================================================


struct  BFu7ll_BFu32i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu32i_BFu7i) C1{ FL:7 Fi:32 Fi:7}



static void Test_BFu7ll_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu7i, BFu7ll_BFu32i_BFu7i)
//============================================================================


struct  BFu7ll_BFu32i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu32i_BFu7ll) C1{ FL:7 Fi:32 FL:7}



static void Test_BFu7ll_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu7ll, BFu7ll_BFu32i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu32i_BFu7s) C1{ FL:7 Fi:32 Fs:7}



static void Test_BFu7ll_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu7s, BFu7ll_BFu32i_BFu7s)
//============================================================================


struct  BFu7ll_BFu32i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu32i_BFu8c) C1{ FL:7 Fi:32 Fc:8}



static void Test_BFu7ll_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu8c, BFu7ll_BFu32i_BFu8c)
//============================================================================


struct  BFu7ll_BFu32i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu32i_BFu8i) C1{ FL:7 Fi:32 Fi:8}



static void Test_BFu7ll_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu8i, BFu7ll_BFu32i_BFu8i)
//============================================================================


struct  BFu7ll_BFu32i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu32i_BFu8ll) C1{ FL:7 Fi:32 FL:8}



static void Test_BFu7ll_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu8ll, BFu7ll_BFu32i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu32i_BFu8s) C1{ FL:7 Fi:32 Fs:8}



static void Test_BFu7ll_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu8s, BFu7ll_BFu32i_BFu8s)
//============================================================================


struct  BFu7ll_BFu32i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu32i_BFu9i) C1{ FL:7 Fi:32 Fi:9}



static void Test_BFu7ll_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu9i, BFu7ll_BFu32i_BFu9i)
//============================================================================


struct  BFu7ll_BFu32i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu32i_BFu9ll) C1{ FL:7 Fi:32 FL:9}



static void Test_BFu7ll_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu9ll, BFu7ll_BFu32i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu32i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu32i_BFu9s) C1{ FL:7 Fi:32 Fs:9}



static void Test_BFu7ll_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu32i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_BFu9s, BFu7ll_BFu32i_BFu9s)
//============================================================================


struct  BFu7ll_BFu32i_C  {
  __tsu64 v1:7;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu7ll_BFu32i_C) C1{ FL:7 Fi:32 Fc}



static void Test_BFu7ll_BFu32i_C()
{
  {
    init_simple_test("BFu7ll_BFu32i_C");
    static STRUCT_IF_C BFu7ll_BFu32i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_C, BFu7ll_BFu32i_C)
//============================================================================


struct  BFu7ll_BFu32i_D  {
  __tsu64 v1:7;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu7ll_BFu32i_D) C1{ FL:7 Fi:32 FL}



static void Test_BFu7ll_BFu32i_D()
{
  {
    init_simple_test("BFu7ll_BFu32i_D");
    static STRUCT_IF_C BFu7ll_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_D, BFu7ll_BFu32i_D)
//============================================================================


struct  BFu7ll_BFu32i_F  {
  __tsu64 v1:7;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu7ll_BFu32i_F) C1{ FL:7 Fi:32 Fi}



static void Test_BFu7ll_BFu32i_F()
{
  {
    init_simple_test("BFu7ll_BFu32i_F");
    static STRUCT_IF_C BFu7ll_BFu32i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_F, BFu7ll_BFu32i_F)
//============================================================================


struct  BFu7ll_BFu32i_I  {
  __tsu64 v1:7;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu7ll_BFu32i_I) C1{ FL:7 Fi:32 Fi}



static void Test_BFu7ll_BFu32i_I()
{
  {
    init_simple_test("BFu7ll_BFu32i_I");
    static STRUCT_IF_C BFu7ll_BFu32i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_I, BFu7ll_BFu32i_I)
//============================================================================


struct  BFu7ll_BFu32i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu7ll_BFu32i_Ip) C1{ FL:7 Fi:32 Fp}



static void Test_BFu7ll_BFu32i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu32i_Ip");
    static STRUCT_IF_C BFu7ll_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Ip, BFu7ll_BFu32i_Ip)
//============================================================================


struct  BFu7ll_BFu32i_L  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu32i_L) C1{ FL:7 Fi:32 FL}



static void Test_BFu7ll_BFu32i_L()
{
  {
    init_simple_test("BFu7ll_BFu32i_L");
    static STRUCT_IF_C BFu7ll_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_L, BFu7ll_BFu32i_L)
//============================================================================


struct  BFu7ll_BFu32i_S  {
  __tsu64 v1:7;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu7ll_BFu32i_S) C1{ FL:7 Fi:32 Fs}



static void Test_BFu7ll_BFu32i_S()
{
  {
    init_simple_test("BFu7ll_BFu32i_S");
    static STRUCT_IF_C BFu7ll_BFu32i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_S, BFu7ll_BFu32i_S)
//============================================================================


struct  BFu7ll_BFu32i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu32i_Uc) C1{ FL:7 Fi:32 Fc}



static void Test_BFu7ll_BFu32i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu32i_Uc");
    static STRUCT_IF_C BFu7ll_BFu32i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Uc, BFu7ll_BFu32i_Uc)
//============================================================================


struct  BFu7ll_BFu32i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu32i_Ui) C1{ FL:7 Fi:32 Fi}



static void Test_BFu7ll_BFu32i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu32i_Ui");
    static STRUCT_IF_C BFu7ll_BFu32i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Ui, BFu7ll_BFu32i_Ui)
//============================================================================


struct  BFu7ll_BFu32i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu32i_Ul) C1{ FL:7 Fi:32 FL}



static void Test_BFu7ll_BFu32i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu32i_Ul");
    static STRUCT_IF_C BFu7ll_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Ul, BFu7ll_BFu32i_Ul)
//============================================================================


struct  BFu7ll_BFu32i_Us  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu32i_Us) C1{ FL:7 Fi:32 Fs}



static void Test_BFu7ll_BFu32i_Us()
{
  {
    init_simple_test("BFu7ll_BFu32i_Us");
    static STRUCT_IF_C BFu7ll_BFu32i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Us, BFu7ll_BFu32i_Us)
//============================================================================


struct  BFu7ll_BFu32i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu7ll_BFu32i_Vp) C1{ FL:7 Fi:32 Fp}



static void Test_BFu7ll_BFu32i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu32i_Vp");
    static STRUCT_IF_C BFu7ll_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32i_Vp, BFu7ll_BFu32i_Vp)
//============================================================================


struct  BFu7ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu7ll_BFu32ll) C1{ FL:7 FL:32}



static void Test_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll, BFu7ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu32ll_BFu15i) C1{ FL:7 FL:32 Fi:15}



static void Test_BFu7ll_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu15i, BFu7ll_BFu32ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu32ll_BFu15ll) C1{ FL:7 FL:32 FL:15}



static void Test_BFu7ll_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu15ll, BFu7ll_BFu32ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu32ll_BFu15s) C1{ FL:7 FL:32 Fs:15}



static void Test_BFu7ll_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu15s, BFu7ll_BFu32ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu32ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu32ll_BFu16i) C1{ FL:7 FL:32 Fi:16}



static void Test_BFu7ll_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu16i, BFu7ll_BFu32ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu32ll_BFu16ll) C1{ FL:7 FL:32 FL:16}



static void Test_BFu7ll_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu16ll, BFu7ll_BFu32ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu32ll_BFu16s) C1{ FL:7 FL:32 Fs:16}



static void Test_BFu7ll_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu16s, BFu7ll_BFu32ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu32ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu32ll_BFu17i) C1{ FL:7 FL:32 Fi:17}



static void Test_BFu7ll_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu17i, BFu7ll_BFu32ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu32ll_BFu17ll) C1{ FL:7 FL:32 FL:17}



static void Test_BFu7ll_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu17ll, BFu7ll_BFu32ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu32ll_BFu1c) C1{ FL:7 FL:32 Fc:1}



static void Test_BFu7ll_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7ll_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu1c, BFu7ll_BFu32ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu32ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu32ll_BFu1i) C1{ FL:7 FL:32 Fi:1}



static void Test_BFu7ll_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7ll_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu1i, BFu7ll_BFu32ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu32ll_BFu1ll) C1{ FL:7 FL:32 FL:1}



static void Test_BFu7ll_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7ll_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu1ll, BFu7ll_BFu32ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu32ll_BFu1s) C1{ FL:7 FL:32 Fs:1}



static void Test_BFu7ll_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7ll_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu1s, BFu7ll_BFu32ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu32ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu32ll_BFu31i) C1{ FL:7 FL:32 Fi:31}



static void Test_BFu7ll_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu31i, BFu7ll_BFu32ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu32ll_BFu31ll) C1{ FL:7 FL:32 FL:31}



static void Test_BFu7ll_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu7ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7ll_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu31ll, BFu7ll_BFu32ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu32ll_BFu32i) C1{ FL:7 FL:32 Fi:32}



static void Test_BFu7ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu32i, BFu7ll_BFu32ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu32ll_BFu32ll) C1{ FL:7 FL:32 FL:32}



static void Test_BFu7ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu7ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu32ll, BFu7ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu32ll_BFu33) C1{ FL:7 FL:32 FL:33}



static void Test_BFu7ll_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu7ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7ll_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu33, BFu7ll_BFu32ll_BFu33)
//============================================================================


struct  BFu7ll_BFu32ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu32ll_BFu7c) C1{ FL:7 FL:32 Fc:7}



static void Test_BFu7ll_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu7c, BFu7ll_BFu32ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu32ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu32ll_BFu7i) C1{ FL:7 FL:32 Fi:7}



static void Test_BFu7ll_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu7i, BFu7ll_BFu32ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu32ll_BFu7ll) C1{ FL:7 FL:32 FL:7}



static void Test_BFu7ll_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu7ll, BFu7ll_BFu32ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu32ll_BFu7s) C1{ FL:7 FL:32 Fs:7}



static void Test_BFu7ll_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu7s, BFu7ll_BFu32ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu32ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu32ll_BFu8c) C1{ FL:7 FL:32 Fc:8}



static void Test_BFu7ll_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu8c, BFu7ll_BFu32ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu32ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu32ll_BFu8i) C1{ FL:7 FL:32 Fi:8}



static void Test_BFu7ll_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu8i, BFu7ll_BFu32ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu32ll_BFu8ll) C1{ FL:7 FL:32 FL:8}



static void Test_BFu7ll_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu8ll, BFu7ll_BFu32ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu32ll_BFu8s) C1{ FL:7 FL:32 Fs:8}



static void Test_BFu7ll_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu8s, BFu7ll_BFu32ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu32ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu32ll_BFu9i) C1{ FL:7 FL:32 Fi:9}



static void Test_BFu7ll_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu9i, BFu7ll_BFu32ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu32ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu32ll_BFu9ll) C1{ FL:7 FL:32 FL:9}



static void Test_BFu7ll_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu9ll, BFu7ll_BFu32ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu32ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu32ll_BFu9s) C1{ FL:7 FL:32 Fs:9}



static void Test_BFu7ll_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_BFu9s, BFu7ll_BFu32ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu32ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu7ll_BFu32ll_C) C1{ FL:7 FL:32 Fc}



static void Test_BFu7ll_BFu32ll_C()
{
  {
    init_simple_test("BFu7ll_BFu32ll_C");
    static STRUCT_IF_C BFu7ll_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_C");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_C, BFu7ll_BFu32ll_C)
//============================================================================


struct  BFu7ll_BFu32ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu7ll_BFu32ll_D) C1{ FL:7 FL:32 FL}



static void Test_BFu7ll_BFu32ll_D()
{
  {
    init_simple_test("BFu7ll_BFu32ll_D");
    static STRUCT_IF_C BFu7ll_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_D, BFu7ll_BFu32ll_D)
//============================================================================


struct  BFu7ll_BFu32ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu7ll_BFu32ll_F) C1{ FL:7 FL:32 Fi}



static void Test_BFu7ll_BFu32ll_F()
{
  {
    init_simple_test("BFu7ll_BFu32ll_F");
    static STRUCT_IF_C BFu7ll_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_F, BFu7ll_BFu32ll_F)
//============================================================================


struct  BFu7ll_BFu32ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu7ll_BFu32ll_I) C1{ FL:7 FL:32 Fi}



static void Test_BFu7ll_BFu32ll_I()
{
  {
    init_simple_test("BFu7ll_BFu32ll_I");
    static STRUCT_IF_C BFu7ll_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_I, BFu7ll_BFu32ll_I)
//============================================================================


struct  BFu7ll_BFu32ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu7ll_BFu32ll_Ip) C1{ FL:7 FL:32 Fp}



static void Test_BFu7ll_BFu32ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Ip, BFu7ll_BFu32ll_Ip)
//============================================================================


struct  BFu7ll_BFu32ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu32ll_L) C1{ FL:7 FL:32 FL}



static void Test_BFu7ll_BFu32ll_L()
{
  {
    init_simple_test("BFu7ll_BFu32ll_L");
    static STRUCT_IF_C BFu7ll_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_L, BFu7ll_BFu32ll_L)
//============================================================================


struct  BFu7ll_BFu32ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu7ll_BFu32ll_S) C1{ FL:7 FL:32 Fs}



static void Test_BFu7ll_BFu32ll_S()
{
  {
    init_simple_test("BFu7ll_BFu32ll_S");
    static STRUCT_IF_C BFu7ll_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_S, BFu7ll_BFu32ll_S)
//============================================================================


struct  BFu7ll_BFu32ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu32ll_Uc) C1{ FL:7 FL:32 Fc}



static void Test_BFu7ll_BFu32ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Uc, BFu7ll_BFu32ll_Uc)
//============================================================================


struct  BFu7ll_BFu32ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu32ll_Ui) C1{ FL:7 FL:32 Fi}



static void Test_BFu7ll_BFu32ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Ui, BFu7ll_BFu32ll_Ui)
//============================================================================


struct  BFu7ll_BFu32ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu32ll_Ul) C1{ FL:7 FL:32 FL}



static void Test_BFu7ll_BFu32ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Ul, BFu7ll_BFu32ll_Ul)
//============================================================================


struct  BFu7ll_BFu32ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu32ll_Us) C1{ FL:7 FL:32 Fs}



static void Test_BFu7ll_BFu32ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Us");
    static STRUCT_IF_C BFu7ll_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Us, BFu7ll_BFu32ll_Us)
//============================================================================


struct  BFu7ll_BFu32ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu7ll_BFu32ll_Vp) C1{ FL:7 FL:32 Fp}



static void Test_BFu7ll_BFu32ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu32ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu32ll_Vp, BFu7ll_BFu32ll_Vp)
//============================================================================


struct  BFu7ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu7ll_BFu33) C1{ FL:7 FL:33}



static void Test_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33, BFu7ll_BFu33)
//============================================================================


struct  BFu7ll_BFu33_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu33_BFu15i) C1{ FL:7 FL:33 Fi:15}



static void Test_BFu7ll_BFu33_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu15i, BFu7ll_BFu33_BFu15i)
//============================================================================


struct  BFu7ll_BFu33_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu33_BFu15ll) C1{ FL:7 FL:33 FL:15}



static void Test_BFu7ll_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu15ll, BFu7ll_BFu33_BFu15ll)
//============================================================================


struct  BFu7ll_BFu33_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu33_BFu15s) C1{ FL:7 FL:33 Fs:15}



static void Test_BFu7ll_BFu33_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu15s, BFu7ll_BFu33_BFu15s)
//============================================================================


struct  BFu7ll_BFu33_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu33_BFu16i) C1{ FL:7 FL:33 Fi:16}



static void Test_BFu7ll_BFu33_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu16i, BFu7ll_BFu33_BFu16i)
//============================================================================


struct  BFu7ll_BFu33_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu33_BFu16ll) C1{ FL:7 FL:33 FL:16}



static void Test_BFu7ll_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu16ll, BFu7ll_BFu33_BFu16ll)
//============================================================================


struct  BFu7ll_BFu33_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu33_BFu16s) C1{ FL:7 FL:33 Fs:16}



static void Test_BFu7ll_BFu33_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu16s, BFu7ll_BFu33_BFu16s)
//============================================================================


struct  BFu7ll_BFu33_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu33_BFu17i) C1{ FL:7 FL:33 Fi:17}



static void Test_BFu7ll_BFu33_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu17i, BFu7ll_BFu33_BFu17i)
//============================================================================


struct  BFu7ll_BFu33_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu33_BFu17ll) C1{ FL:7 FL:33 FL:17}



static void Test_BFu7ll_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu17ll, BFu7ll_BFu33_BFu17ll)
//============================================================================


struct  BFu7ll_BFu33_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu33_BFu1c) C1{ FL:7 FL:33 Fc:1}



static void Test_BFu7ll_BFu33_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7ll_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu1c, BFu7ll_BFu33_BFu1c)
//============================================================================


struct  BFu7ll_BFu33_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu33_BFu1i) C1{ FL:7 FL:33 Fi:1}



static void Test_BFu7ll_BFu33_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7ll_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu1i, BFu7ll_BFu33_BFu1i)
//============================================================================


struct  BFu7ll_BFu33_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu33_BFu1ll) C1{ FL:7 FL:33 FL:1}



static void Test_BFu7ll_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7ll_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu1ll, BFu7ll_BFu33_BFu1ll)
//============================================================================


struct  BFu7ll_BFu33_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu33_BFu1s) C1{ FL:7 FL:33 Fs:1}



static void Test_BFu7ll_BFu33_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7ll_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu1s, BFu7ll_BFu33_BFu1s)
//============================================================================


struct  BFu7ll_BFu33_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu33_BFu31i) C1{ FL:7 FL:33 Fi:31}



static void Test_BFu7ll_BFu33_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu31i, BFu7ll_BFu33_BFu31i)
//============================================================================


struct  BFu7ll_BFu33_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu33_BFu31ll) C1{ FL:7 FL:33 FL:31}



static void Test_BFu7ll_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu7ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu31ll, BFu7ll_BFu33_BFu31ll)
//============================================================================


struct  BFu7ll_BFu33_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu33_BFu32i) C1{ FL:7 FL:33 Fi:32}



static void Test_BFu7ll_BFu33_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu32i, BFu7ll_BFu33_BFu32i)
//============================================================================


struct  BFu7ll_BFu33_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu33_BFu32ll) C1{ FL:7 FL:33 FL:32}



static void Test_BFu7ll_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu7ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu32ll, BFu7ll_BFu33_BFu32ll)
//============================================================================


struct  BFu7ll_BFu33_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu33_BFu33) C1{ FL:7 FL:33 FL:33}



static void Test_BFu7ll_BFu33_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu33");
    static STRUCT_IF_C BFu7ll_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu7ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu33, BFu7ll_BFu33_BFu33)
//============================================================================


struct  BFu7ll_BFu33_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu33_BFu7c) C1{ FL:7 FL:33 Fc:7}



static void Test_BFu7ll_BFu33_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu7c, BFu7ll_BFu33_BFu7c)
//============================================================================


struct  BFu7ll_BFu33_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu33_BFu7i) C1{ FL:7 FL:33 Fi:7}



static void Test_BFu7ll_BFu33_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu7i, BFu7ll_BFu33_BFu7i)
//============================================================================


struct  BFu7ll_BFu33_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu33_BFu7ll) C1{ FL:7 FL:33 FL:7}



static void Test_BFu7ll_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu7ll, BFu7ll_BFu33_BFu7ll)
//============================================================================


struct  BFu7ll_BFu33_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu33_BFu7s) C1{ FL:7 FL:33 Fs:7}



static void Test_BFu7ll_BFu33_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu7s, BFu7ll_BFu33_BFu7s)
//============================================================================


struct  BFu7ll_BFu33_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu33_BFu8c) C1{ FL:7 FL:33 Fc:8}



static void Test_BFu7ll_BFu33_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu8c, BFu7ll_BFu33_BFu8c)
//============================================================================


struct  BFu7ll_BFu33_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu33_BFu8i) C1{ FL:7 FL:33 Fi:8}



static void Test_BFu7ll_BFu33_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu8i, BFu7ll_BFu33_BFu8i)
//============================================================================


struct  BFu7ll_BFu33_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu33_BFu8ll) C1{ FL:7 FL:33 FL:8}



static void Test_BFu7ll_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu8ll, BFu7ll_BFu33_BFu8ll)
//============================================================================


struct  BFu7ll_BFu33_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu33_BFu8s) C1{ FL:7 FL:33 Fs:8}



static void Test_BFu7ll_BFu33_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu8s, BFu7ll_BFu33_BFu8s)
//============================================================================


struct  BFu7ll_BFu33_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu33_BFu9i) C1{ FL:7 FL:33 Fi:9}



static void Test_BFu7ll_BFu33_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu9i, BFu7ll_BFu33_BFu9i)
//============================================================================


struct  BFu7ll_BFu33_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu33_BFu9ll) C1{ FL:7 FL:33 FL:9}



static void Test_BFu7ll_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu9ll, BFu7ll_BFu33_BFu9ll)
//============================================================================


struct  BFu7ll_BFu33_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu33_BFu9s) C1{ FL:7 FL:33 Fs:9}



static void Test_BFu7ll_BFu33_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu7ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_BFu9s, BFu7ll_BFu33_BFu9s)
//============================================================================


struct  BFu7ll_BFu33_C  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu7ll_BFu33_C) C1{ FL:7 FL:33 Fc}



static void Test_BFu7ll_BFu33_C()
{
  {
    init_simple_test("BFu7ll_BFu33_C");
    static STRUCT_IF_C BFu7ll_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_C");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_C, BFu7ll_BFu33_C)
//============================================================================


struct  BFu7ll_BFu33_D  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu7ll_BFu33_D) C1{ FL:7 FL:33 FL}



static void Test_BFu7ll_BFu33_D()
{
  {
    init_simple_test("BFu7ll_BFu33_D");
    static STRUCT_IF_C BFu7ll_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_D, BFu7ll_BFu33_D)
//============================================================================


struct  BFu7ll_BFu33_F  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu7ll_BFu33_F) C1{ FL:7 FL:33 Fi}



static void Test_BFu7ll_BFu33_F()
{
  {
    init_simple_test("BFu7ll_BFu33_F");
    static STRUCT_IF_C BFu7ll_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_F, BFu7ll_BFu33_F)
//============================================================================


struct  BFu7ll_BFu33_I  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu7ll_BFu33_I) C1{ FL:7 FL:33 Fi}



static void Test_BFu7ll_BFu33_I()
{
  {
    init_simple_test("BFu7ll_BFu33_I");
    static STRUCT_IF_C BFu7ll_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_I, BFu7ll_BFu33_I)
//============================================================================


struct  BFu7ll_BFu33_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu7ll_BFu33_Ip) C1{ FL:7 FL:33 Fp}



static void Test_BFu7ll_BFu33_Ip()
{
  {
    init_simple_test("BFu7ll_BFu33_Ip");
    static STRUCT_IF_C BFu7ll_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Ip, BFu7ll_BFu33_Ip)
//============================================================================


struct  BFu7ll_BFu33_L  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu33_L) C1{ FL:7 FL:33 FL}



static void Test_BFu7ll_BFu33_L()
{
  {
    init_simple_test("BFu7ll_BFu33_L");
    static STRUCT_IF_C BFu7ll_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_L, BFu7ll_BFu33_L)
//============================================================================


struct  BFu7ll_BFu33_S  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu7ll_BFu33_S) C1{ FL:7 FL:33 Fs}



static void Test_BFu7ll_BFu33_S()
{
  {
    init_simple_test("BFu7ll_BFu33_S");
    static STRUCT_IF_C BFu7ll_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_S, BFu7ll_BFu33_S)
//============================================================================


struct  BFu7ll_BFu33_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu33_Uc) C1{ FL:7 FL:33 Fc}



static void Test_BFu7ll_BFu33_Uc()
{
  {
    init_simple_test("BFu7ll_BFu33_Uc");
    static STRUCT_IF_C BFu7ll_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Uc");
    check_field_offset(lv, v3, 5, "BFu7ll_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Uc, BFu7ll_BFu33_Uc)
//============================================================================


struct  BFu7ll_BFu33_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu33_Ui) C1{ FL:7 FL:33 Fi}



static void Test_BFu7ll_BFu33_Ui()
{
  {
    init_simple_test("BFu7ll_BFu33_Ui");
    static STRUCT_IF_C BFu7ll_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Ui, BFu7ll_BFu33_Ui)
//============================================================================


struct  BFu7ll_BFu33_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu33_Ul) C1{ FL:7 FL:33 FL}



static void Test_BFu7ll_BFu33_Ul()
{
  {
    init_simple_test("BFu7ll_BFu33_Ul");
    static STRUCT_IF_C BFu7ll_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7ll_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Ul, BFu7ll_BFu33_Ul)
//============================================================================


struct  BFu7ll_BFu33_Us  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu33_Us) C1{ FL:7 FL:33 Fs}



static void Test_BFu7ll_BFu33_Us()
{
  {
    init_simple_test("BFu7ll_BFu33_Us");
    static STRUCT_IF_C BFu7ll_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu7ll_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Us, BFu7ll_BFu33_Us)
//============================================================================


struct  BFu7ll_BFu33_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu7ll_BFu33_Vp) C1{ FL:7 FL:33 Fp}



static void Test_BFu7ll_BFu33_Vp()
{
  {
    init_simple_test("BFu7ll_BFu33_Vp");
    static STRUCT_IF_C BFu7ll_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu7ll_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu33_Vp, BFu7ll_BFu33_Vp)
//============================================================================


struct  BFu7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu7ll_BFu7c) C1{ FL:7 Fc:7}



static void Test_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c, BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c, BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFs7c, BFu7ll_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFs7i, BFu7ll_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFs7ll, BFu7ll_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFs7s, BFu7ll_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFu7c, BFu7ll_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFu7i, BFu7ll_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFu7ll, BFu7ll_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7c_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7c_BFu7s, BFu7ll_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i, BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFs7c, BFu7ll_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFs7i, BFu7ll_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFs7ll, BFu7ll_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFs7s, BFu7ll_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFu7c, BFu7ll_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFu7i, BFu7ll_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFu7ll, BFu7ll_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7i_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7i_BFu7s, BFu7ll_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll, BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFs7c, BFu7ll_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFs7i, BFu7ll_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFs7ll, BFu7ll_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFs7s, BFu7ll_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFu7c, BFu7ll_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFu7i, BFu7ll_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFu7ll, BFu7ll_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7ll_BFu7s, BFu7ll_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s, BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFs7c, BFu7ll_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFs7i, BFu7ll_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFs7ll, BFu7ll_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFs7s, BFu7ll_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFu7c, BFu7ll_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFu7i, BFu7ll_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFu7ll, BFu7ll_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFs7s_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFs7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFs7s_BFu7s, BFu7ll_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu15i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu7c_BFu15i) C1{ FL:7 Fc:7 Fi:15}



static void Test_BFu7ll_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu15i, BFu7ll_BFu7c_BFu15i)
//============================================================================


struct  BFu7ll_BFu7c_BFu15ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu7c_BFu15ll) C1{ FL:7 Fc:7 FL:15}



static void Test_BFu7ll_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu15ll, BFu7ll_BFu7c_BFu15ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu15s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu7c_BFu15s) C1{ FL:7 Fc:7 Fs:15}



static void Test_BFu7ll_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu15s, BFu7ll_BFu7c_BFu15s)
//============================================================================


struct  BFu7ll_BFu7c_BFu16i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu7c_BFu16i) C1{ FL:7 Fc:7 Fi:16}



static void Test_BFu7ll_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu16i, BFu7ll_BFu7c_BFu16i)
//============================================================================


struct  BFu7ll_BFu7c_BFu16ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu7c_BFu16ll) C1{ FL:7 Fc:7 FL:16}



static void Test_BFu7ll_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu16ll, BFu7ll_BFu7c_BFu16ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu16s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu7c_BFu16s) C1{ FL:7 Fc:7 Fs:16}



static void Test_BFu7ll_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu16s, BFu7ll_BFu7c_BFu16s)
//============================================================================


struct  BFu7ll_BFu7c_BFu17i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu7c_BFu17i) C1{ FL:7 Fc:7 Fi:17}



static void Test_BFu7ll_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu17i, BFu7ll_BFu7c_BFu17i)
//============================================================================


struct  BFu7ll_BFu7c_BFu17ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu7c_BFu17ll) C1{ FL:7 Fc:7 FL:17}



static void Test_BFu7ll_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu17ll, BFu7ll_BFu7c_BFu17ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu1c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu7c_BFu1c) C1{ FL:7 Fc:7 Fc:1}



static void Test_BFu7ll_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu1c, BFu7ll_BFu7c_BFu1c)
//============================================================================


struct  BFu7ll_BFu7c_BFu1i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu7c_BFu1i) C1{ FL:7 Fc:7 Fi:1}



static void Test_BFu7ll_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu1i, BFu7ll_BFu7c_BFu1i)
//============================================================================


struct  BFu7ll_BFu7c_BFu1ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu7c_BFu1ll) C1{ FL:7 Fc:7 FL:1}



static void Test_BFu7ll_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu1ll, BFu7ll_BFu7c_BFu1ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu1s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu7c_BFu1s) C1{ FL:7 Fc:7 Fs:1}



static void Test_BFu7ll_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu1s, BFu7ll_BFu7c_BFu1s)
//============================================================================


struct  BFu7ll_BFu7c_BFu31i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu7c_BFu31i) C1{ FL:7 Fc:7 Fi:31}



static void Test_BFu7ll_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu31i, BFu7ll_BFu7c_BFu31i)
//============================================================================


struct  BFu7ll_BFu7c_BFu31ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu7c_BFu31ll) C1{ FL:7 Fc:7 FL:31}



static void Test_BFu7ll_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu31ll, BFu7ll_BFu7c_BFu31ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu32i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu7c_BFu32i) C1{ FL:7 Fc:7 Fi:32}



static void Test_BFu7ll_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu32i, BFu7ll_BFu7c_BFu32i)
//============================================================================


struct  BFu7ll_BFu7c_BFu32ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu7c_BFu32ll) C1{ FL:7 Fc:7 FL:32}



static void Test_BFu7ll_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu32ll, BFu7ll_BFu7c_BFu32ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu33  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu7c_BFu33) C1{ FL:7 Fc:7 FL:33}



static void Test_BFu7ll_BFu7c_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu33");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu33, BFu7ll_BFu7c_BFu33)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c, BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFs7c, BFu7ll_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFs7i, BFu7ll_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFs7ll, BFu7ll_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFs7s, BFu7ll_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFu7c, BFu7ll_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFu7i, BFu7ll_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFu7ll, BFu7ll_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7c_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7c_BFu7s, BFu7ll_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i, BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFs7c, BFu7ll_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFs7i, BFu7ll_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFs7ll, BFu7ll_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFs7s, BFu7ll_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFu7c, BFu7ll_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFu7i, BFu7ll_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFu7ll, BFu7ll_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7i_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7i_BFu7s, BFu7ll_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll, BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFs7c, BFu7ll_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFs7i, BFu7ll_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFs7ll, BFu7ll_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFs7s, BFu7ll_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFu7c, BFu7ll_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFu7i, BFu7ll_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFu7ll, BFu7ll_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7ll_BFu7s, BFu7ll_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s, BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFs7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFs7c, BFu7ll_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFs7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFs7i, BFu7ll_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFs7ll, BFu7ll_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFs7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFs7s, BFu7ll_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFu7c, BFu7ll_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFu7i, BFu7ll_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFu7ll, BFu7ll_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu7s_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7c_BFu7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu7s_BFu7s, BFu7ll_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7c_BFu8c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu7c_BFu8c) C1{ FL:7 Fc:7 Fc:8}



static void Test_BFu7ll_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu8c, BFu7ll_BFu7c_BFu8c)
//============================================================================


struct  BFu7ll_BFu7c_BFu8i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu7c_BFu8i) C1{ FL:7 Fc:7 Fi:8}



static void Test_BFu7ll_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu8i, BFu7ll_BFu7c_BFu8i)
//============================================================================


struct  BFu7ll_BFu7c_BFu8ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu7c_BFu8ll) C1{ FL:7 Fc:7 FL:8}



static void Test_BFu7ll_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu8ll, BFu7ll_BFu7c_BFu8ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu8s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu7c_BFu8s) C1{ FL:7 Fc:7 Fs:8}



static void Test_BFu7ll_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu8s, BFu7ll_BFu7c_BFu8s)
//============================================================================


struct  BFu7ll_BFu7c_BFu9i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu7c_BFu9i) C1{ FL:7 Fc:7 Fi:9}



static void Test_BFu7ll_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu9i, BFu7ll_BFu7c_BFu9i)
//============================================================================


struct  BFu7ll_BFu7c_BFu9ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu7c_BFu9ll) C1{ FL:7 Fc:7 FL:9}



static void Test_BFu7ll_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu9ll, BFu7ll_BFu7c_BFu9ll)
//============================================================================


struct  BFu7ll_BFu7c_BFu9s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu7c_BFu9s) C1{ FL:7 Fc:7 Fs:9}



static void Test_BFu7ll_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu7c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_BFu9s, BFu7ll_BFu7c_BFu9s)
//============================================================================


struct  BFu7ll_BFu7c_C  {
  __tsu64 v1:7;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu7ll_BFu7c_C) C1{ FL:7 Fc:7 Fc}



static void Test_BFu7ll_BFu7c_C()
{
  {
    init_simple_test("BFu7ll_BFu7c_C");
    static STRUCT_IF_C BFu7ll_BFu7c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_C, BFu7ll_BFu7c_C)
//============================================================================


struct  BFu7ll_BFu7c_D  {
  __tsu64 v1:7;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu7ll_BFu7c_D) C1{ FL:7 Fc:7 FL}



static void Test_BFu7ll_BFu7c_D()
{
  {
    init_simple_test("BFu7ll_BFu7c_D");
    static STRUCT_IF_C BFu7ll_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_D, BFu7ll_BFu7c_D)
//============================================================================


struct  BFu7ll_BFu7c_F  {
  __tsu64 v1:7;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu7ll_BFu7c_F) C1{ FL:7 Fc:7 Fi}



static void Test_BFu7ll_BFu7c_F()
{
  {
    init_simple_test("BFu7ll_BFu7c_F");
    static STRUCT_IF_C BFu7ll_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_F, BFu7ll_BFu7c_F)
//============================================================================


struct  BFu7ll_BFu7c_I  {
  __tsu64 v1:7;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu7ll_BFu7c_I) C1{ FL:7 Fc:7 Fi}



static void Test_BFu7ll_BFu7c_I()
{
  {
    init_simple_test("BFu7ll_BFu7c_I");
    static STRUCT_IF_C BFu7ll_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_I, BFu7ll_BFu7c_I)
//============================================================================


struct  BFu7ll_BFu7c_Ip  {
  __tsu64 v1:7;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu7ll_BFu7c_Ip) C1{ FL:7 Fc:7 Fp}



static void Test_BFu7ll_BFu7c_Ip()
{
  {
    init_simple_test("BFu7ll_BFu7c_Ip");
    static STRUCT_IF_C BFu7ll_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Ip, BFu7ll_BFu7c_Ip)
//============================================================================


struct  BFu7ll_BFu7c_L  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu7c_L) C1{ FL:7 Fc:7 FL}



static void Test_BFu7ll_BFu7c_L()
{
  {
    init_simple_test("BFu7ll_BFu7c_L");
    static STRUCT_IF_C BFu7ll_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_L, BFu7ll_BFu7c_L)
//============================================================================


struct  BFu7ll_BFu7c_S  {
  __tsu64 v1:7;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu7ll_BFu7c_S) C1{ FL:7 Fc:7 Fs}



static void Test_BFu7ll_BFu7c_S()
{
  {
    init_simple_test("BFu7ll_BFu7c_S");
    static STRUCT_IF_C BFu7ll_BFu7c_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_S, BFu7ll_BFu7c_S)
//============================================================================


struct  BFu7ll_BFu7c_Uc  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu7c_Uc) C1{ FL:7 Fc:7 Fc}



static void Test_BFu7ll_BFu7c_Uc()
{
  {
    init_simple_test("BFu7ll_BFu7c_Uc");
    static STRUCT_IF_C BFu7ll_BFu7c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Uc, BFu7ll_BFu7c_Uc)
//============================================================================


struct  BFu7ll_BFu7c_Ui  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu7c_Ui) C1{ FL:7 Fc:7 Fi}



static void Test_BFu7ll_BFu7c_Ui()
{
  {
    init_simple_test("BFu7ll_BFu7c_Ui");
    static STRUCT_IF_C BFu7ll_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Ui, BFu7ll_BFu7c_Ui)
//============================================================================


struct  BFu7ll_BFu7c_Ul  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu7c_Ul) C1{ FL:7 Fc:7 FL}



static void Test_BFu7ll_BFu7c_Ul()
{
  {
    init_simple_test("BFu7ll_BFu7c_Ul");
    static STRUCT_IF_C BFu7ll_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Ul, BFu7ll_BFu7c_Ul)
//============================================================================


struct  BFu7ll_BFu7c_Us  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu7c_Us) C1{ FL:7 Fc:7 Fs}



static void Test_BFu7ll_BFu7c_Us()
{
  {
    init_simple_test("BFu7ll_BFu7c_Us");
    static STRUCT_IF_C BFu7ll_BFu7c_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Us, BFu7ll_BFu7c_Us)
//============================================================================


struct  BFu7ll_BFu7c_Vp  {
  __tsu64 v1:7;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu7ll_BFu7c_Vp) C1{ FL:7 Fc:7 Fp}



static void Test_BFu7ll_BFu7c_Vp()
{
  {
    init_simple_test("BFu7ll_BFu7c_Vp");
    static STRUCT_IF_C BFu7ll_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7c_Vp, BFu7ll_BFu7c_Vp)
//============================================================================


struct  BFu7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu7ll_BFu7i) C1{ FL:7 Fi:7}



static void Test_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i, BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c, BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFs7c, BFu7ll_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFs7i, BFu7ll_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFs7ll, BFu7ll_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFs7s, BFu7ll_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFu7c, BFu7ll_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFu7i, BFu7ll_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFu7ll, BFu7ll_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7c_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7c_BFu7s, BFu7ll_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i, BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFs7c, BFu7ll_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFs7i, BFu7ll_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFs7ll, BFu7ll_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFs7s, BFu7ll_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFu7c, BFu7ll_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFu7i, BFu7ll_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFu7ll, BFu7ll_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7i_BFu7s, BFu7ll_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll, BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFs7c, BFu7ll_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFs7i, BFu7ll_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFs7ll, BFu7ll_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFs7s, BFu7ll_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFu7c, BFu7ll_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFu7i, BFu7ll_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFu7ll, BFu7ll_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7ll_BFu7s, BFu7ll_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s, BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFs7c, BFu7ll_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFs7i, BFu7ll_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFs7ll, BFu7ll_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFs7s, BFu7ll_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFu7c, BFu7ll_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFu7i, BFu7ll_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFu7ll, BFu7ll_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFs7s_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFs7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFs7s_BFu7s, BFu7ll_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu7i_BFu15i) C1{ FL:7 Fi:7 Fi:15}



static void Test_BFu7ll_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu15i, BFu7ll_BFu7i_BFu15i)
//============================================================================


struct  BFu7ll_BFu7i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu7i_BFu15ll) C1{ FL:7 Fi:7 FL:15}



static void Test_BFu7ll_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu15ll, BFu7ll_BFu7i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu7i_BFu15s) C1{ FL:7 Fi:7 Fs:15}



static void Test_BFu7ll_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu15s, BFu7ll_BFu7i_BFu15s)
//============================================================================


struct  BFu7ll_BFu7i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu7i_BFu16i) C1{ FL:7 Fi:7 Fi:16}



static void Test_BFu7ll_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu16i, BFu7ll_BFu7i_BFu16i)
//============================================================================


struct  BFu7ll_BFu7i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu7i_BFu16ll) C1{ FL:7 Fi:7 FL:16}



static void Test_BFu7ll_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu16ll, BFu7ll_BFu7i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu7i_BFu16s) C1{ FL:7 Fi:7 Fs:16}



static void Test_BFu7ll_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu16s, BFu7ll_BFu7i_BFu16s)
//============================================================================


struct  BFu7ll_BFu7i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu7i_BFu17i) C1{ FL:7 Fi:7 Fi:17}



static void Test_BFu7ll_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu17i, BFu7ll_BFu7i_BFu17i)
//============================================================================


struct  BFu7ll_BFu7i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu7i_BFu17ll) C1{ FL:7 Fi:7 FL:17}



static void Test_BFu7ll_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu17ll, BFu7ll_BFu7i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu7i_BFu1c) C1{ FL:7 Fi:7 Fc:1}



static void Test_BFu7ll_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu1c, BFu7ll_BFu7i_BFu1c)
//============================================================================


struct  BFu7ll_BFu7i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu7i_BFu1i) C1{ FL:7 Fi:7 Fi:1}



static void Test_BFu7ll_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu1i, BFu7ll_BFu7i_BFu1i)
//============================================================================


struct  BFu7ll_BFu7i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu7i_BFu1ll) C1{ FL:7 Fi:7 FL:1}



static void Test_BFu7ll_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu1ll, BFu7ll_BFu7i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu7i_BFu1s) C1{ FL:7 Fi:7 Fs:1}



static void Test_BFu7ll_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu1s, BFu7ll_BFu7i_BFu1s)
//============================================================================


struct  BFu7ll_BFu7i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu7i_BFu31i) C1{ FL:7 Fi:7 Fi:31}



static void Test_BFu7ll_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu31i, BFu7ll_BFu7i_BFu31i)
//============================================================================


struct  BFu7ll_BFu7i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu7i_BFu31ll) C1{ FL:7 Fi:7 FL:31}



static void Test_BFu7ll_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7ll_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu31ll, BFu7ll_BFu7i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu7i_BFu32i) C1{ FL:7 Fi:7 Fi:32}



static void Test_BFu7ll_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu32i, BFu7ll_BFu7i_BFu32i)
//============================================================================


struct  BFu7ll_BFu7i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu7i_BFu32ll) C1{ FL:7 Fi:7 FL:32}



static void Test_BFu7ll_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7ll_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu32ll, BFu7ll_BFu7i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu7i_BFu33) C1{ FL:7 Fi:7 FL:33}



static void Test_BFu7ll_BFu7i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7ll_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7ll_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu33, BFu7ll_BFu7i_BFu33)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c, BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFs7c, BFu7ll_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFs7i, BFu7ll_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFs7ll, BFu7ll_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFs7s, BFu7ll_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFu7c, BFu7ll_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFu7i, BFu7ll_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFu7ll, BFu7ll_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7c_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7c_BFu7s, BFu7ll_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i, BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFs7c, BFu7ll_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFs7i, BFu7ll_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFs7ll, BFu7ll_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFs7s, BFu7ll_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFu7c, BFu7ll_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFu7i, BFu7ll_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFu7ll, BFu7ll_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7i_BFu7s, BFu7ll_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll, BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFs7c, BFu7ll_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFs7i, BFu7ll_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFs7ll, BFu7ll_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFs7s, BFu7ll_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFu7c, BFu7ll_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFu7i, BFu7ll_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFu7ll, BFu7ll_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7ll_BFu7s, BFu7ll_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s, BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFs7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFs7c, BFu7ll_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFs7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFs7i, BFu7ll_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFs7ll, BFu7ll_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFs7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFs7s, BFu7ll_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFu7c, BFu7ll_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFu7i, BFu7ll_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFu7ll, BFu7ll_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu7s_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7i_BFu7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu7s_BFu7s, BFu7ll_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu7i_BFu8c) C1{ FL:7 Fi:7 Fc:8}



static void Test_BFu7ll_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu8c, BFu7ll_BFu7i_BFu8c)
//============================================================================


struct  BFu7ll_BFu7i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu7i_BFu8i) C1{ FL:7 Fi:7 Fi:8}



static void Test_BFu7ll_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu8i, BFu7ll_BFu7i_BFu8i)
//============================================================================


struct  BFu7ll_BFu7i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu7i_BFu8ll) C1{ FL:7 Fi:7 FL:8}



static void Test_BFu7ll_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu8ll, BFu7ll_BFu7i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu7i_BFu8s) C1{ FL:7 Fi:7 Fs:8}



static void Test_BFu7ll_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu8s, BFu7ll_BFu7i_BFu8s)
//============================================================================


struct  BFu7ll_BFu7i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu7i_BFu9i) C1{ FL:7 Fi:7 Fi:9}



static void Test_BFu7ll_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu9i, BFu7ll_BFu7i_BFu9i)
//============================================================================


struct  BFu7ll_BFu7i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu7i_BFu9ll) C1{ FL:7 Fi:7 FL:9}



static void Test_BFu7ll_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu9ll, BFu7ll_BFu7i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu7i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu7i_BFu9s) C1{ FL:7 Fi:7 Fs:9}



static void Test_BFu7ll_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu7i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_BFu9s, BFu7ll_BFu7i_BFu9s)
//============================================================================


struct  BFu7ll_BFu7i_C  {
  __tsu64 v1:7;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu7ll_BFu7i_C) C1{ FL:7 Fi:7 Fc}



static void Test_BFu7ll_BFu7i_C()
{
  {
    init_simple_test("BFu7ll_BFu7i_C");
    static STRUCT_IF_C BFu7ll_BFu7i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_C, BFu7ll_BFu7i_C)
//============================================================================


struct  BFu7ll_BFu7i_D  {
  __tsu64 v1:7;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu7ll_BFu7i_D) C1{ FL:7 Fi:7 FL}



static void Test_BFu7ll_BFu7i_D()
{
  {
    init_simple_test("BFu7ll_BFu7i_D");
    static STRUCT_IF_C BFu7ll_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_D, BFu7ll_BFu7i_D)
//============================================================================


struct  BFu7ll_BFu7i_F  {
  __tsu64 v1:7;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu7ll_BFu7i_F) C1{ FL:7 Fi:7 Fi}



static void Test_BFu7ll_BFu7i_F()
{
  {
    init_simple_test("BFu7ll_BFu7i_F");
    static STRUCT_IF_C BFu7ll_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_F, BFu7ll_BFu7i_F)
//============================================================================


struct  BFu7ll_BFu7i_I  {
  __tsu64 v1:7;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu7ll_BFu7i_I) C1{ FL:7 Fi:7 Fi}



static void Test_BFu7ll_BFu7i_I()
{
  {
    init_simple_test("BFu7ll_BFu7i_I");
    static STRUCT_IF_C BFu7ll_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_I, BFu7ll_BFu7i_I)
//============================================================================


struct  BFu7ll_BFu7i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu7ll_BFu7i_Ip) C1{ FL:7 Fi:7 Fp}



static void Test_BFu7ll_BFu7i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu7i_Ip");
    static STRUCT_IF_C BFu7ll_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Ip, BFu7ll_BFu7i_Ip)
//============================================================================


struct  BFu7ll_BFu7i_L  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu7i_L) C1{ FL:7 Fi:7 FL}



static void Test_BFu7ll_BFu7i_L()
{
  {
    init_simple_test("BFu7ll_BFu7i_L");
    static STRUCT_IF_C BFu7ll_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_L, BFu7ll_BFu7i_L)
//============================================================================


struct  BFu7ll_BFu7i_S  {
  __tsu64 v1:7;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu7ll_BFu7i_S) C1{ FL:7 Fi:7 Fs}



static void Test_BFu7ll_BFu7i_S()
{
  {
    init_simple_test("BFu7ll_BFu7i_S");
    static STRUCT_IF_C BFu7ll_BFu7i_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_S, BFu7ll_BFu7i_S)
//============================================================================


struct  BFu7ll_BFu7i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu7i_Uc) C1{ FL:7 Fi:7 Fc}



static void Test_BFu7ll_BFu7i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu7i_Uc");
    static STRUCT_IF_C BFu7ll_BFu7i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Uc, BFu7ll_BFu7i_Uc)
//============================================================================


struct  BFu7ll_BFu7i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu7i_Ui) C1{ FL:7 Fi:7 Fi}



static void Test_BFu7ll_BFu7i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu7i_Ui");
    static STRUCT_IF_C BFu7ll_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Ui, BFu7ll_BFu7i_Ui)
//============================================================================


struct  BFu7ll_BFu7i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu7i_Ul) C1{ FL:7 Fi:7 FL}



static void Test_BFu7ll_BFu7i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu7i_Ul");
    static STRUCT_IF_C BFu7ll_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Ul, BFu7ll_BFu7i_Ul)
//============================================================================


struct  BFu7ll_BFu7i_Us  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu7i_Us) C1{ FL:7 Fi:7 Fs}



static void Test_BFu7ll_BFu7i_Us()
{
  {
    init_simple_test("BFu7ll_BFu7i_Us");
    static STRUCT_IF_C BFu7ll_BFu7i_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Us, BFu7ll_BFu7i_Us)
//============================================================================


struct  BFu7ll_BFu7i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu7ll_BFu7i_Vp) C1{ FL:7 Fi:7 Fp}



static void Test_BFu7ll_BFu7i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu7i_Vp");
    static STRUCT_IF_C BFu7ll_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7i_Vp, BFu7ll_BFu7i_Vp)
//============================================================================


struct  BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu7ll_BFu7ll) C1{ FL:7 FL:7}



static void Test_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll, BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c, BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFs7c, BFu7ll_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFs7i, BFu7ll_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFs7ll, BFu7ll_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFs7s, BFu7ll_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFu7c, BFu7ll_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFu7i, BFu7ll_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFu7ll, BFu7ll_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7c_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7c_BFu7s, BFu7ll_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i, BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFs7c, BFu7ll_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFs7i, BFu7ll_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFs7ll, BFu7ll_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFs7s, BFu7ll_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFu7c, BFu7ll_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFu7i, BFu7ll_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFu7ll, BFu7ll_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7i_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7i_BFu7s, BFu7ll_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll, BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFs7c, BFu7ll_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFs7i, BFu7ll_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFs7ll, BFu7ll_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFs7s, BFu7ll_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFu7c, BFu7ll_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFu7i, BFu7ll_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFu7ll, BFu7ll_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7ll_BFu7s, BFu7ll_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s, BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFs7c, BFu7ll_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFs7i, BFu7ll_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFs7ll, BFu7ll_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFs7s, BFu7ll_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFu7c, BFu7ll_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFu7i, BFu7ll_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFu7ll, BFu7ll_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFs7s_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFs7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFs7s_BFu7s, BFu7ll_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu7ll_BFu15i) C1{ FL:7 FL:7 Fi:15}



static void Test_BFu7ll_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu15i, BFu7ll_BFu7ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu7ll_BFu15ll) C1{ FL:7 FL:7 FL:15}



static void Test_BFu7ll_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu15ll, BFu7ll_BFu7ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu7ll_BFu15s) C1{ FL:7 FL:7 Fs:15}



static void Test_BFu7ll_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu15s, BFu7ll_BFu7ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu7ll_BFu16i) C1{ FL:7 FL:7 Fi:16}



static void Test_BFu7ll_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu16i, BFu7ll_BFu7ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu7ll_BFu16ll) C1{ FL:7 FL:7 FL:16}



static void Test_BFu7ll_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu16ll, BFu7ll_BFu7ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu7ll_BFu16s) C1{ FL:7 FL:7 Fs:16}



static void Test_BFu7ll_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu16s, BFu7ll_BFu7ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu7ll_BFu17i) C1{ FL:7 FL:7 Fi:17}



static void Test_BFu7ll_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu17i, BFu7ll_BFu7ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu7ll_BFu17ll) C1{ FL:7 FL:7 FL:17}



static void Test_BFu7ll_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu17ll, BFu7ll_BFu7ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu7ll_BFu1c) C1{ FL:7 FL:7 Fc:1}



static void Test_BFu7ll_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu1c, BFu7ll_BFu7ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu7ll_BFu1i) C1{ FL:7 FL:7 Fi:1}



static void Test_BFu7ll_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu1i, BFu7ll_BFu7ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu7ll_BFu1ll) C1{ FL:7 FL:7 FL:1}



static void Test_BFu7ll_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu1ll, BFu7ll_BFu7ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu7ll_BFu1s) C1{ FL:7 FL:7 Fs:1}



static void Test_BFu7ll_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu1s, BFu7ll_BFu7ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu7ll_BFu31i) C1{ FL:7 FL:7 Fi:31}



static void Test_BFu7ll_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu31i, BFu7ll_BFu7ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu7ll_BFu31ll) C1{ FL:7 FL:7 FL:31}



static void Test_BFu7ll_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7ll_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu31ll, BFu7ll_BFu7ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu7ll_BFu32i) C1{ FL:7 FL:7 Fi:32}



static void Test_BFu7ll_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu32i, BFu7ll_BFu7ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu7ll_BFu32ll) C1{ FL:7 FL:7 FL:32}



static void Test_BFu7ll_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7ll_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu32ll, BFu7ll_BFu7ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu7ll_BFu33) C1{ FL:7 FL:7 FL:33}



static void Test_BFu7ll_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7ll_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu33, BFu7ll_BFu7ll_BFu33)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c, BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFs7c, BFu7ll_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFs7i, BFu7ll_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFs7ll, BFu7ll_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFs7s, BFu7ll_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFu7c, BFu7ll_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFu7i, BFu7ll_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFu7ll, BFu7ll_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7c_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7c_BFu7s, BFu7ll_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i, BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFs7c, BFu7ll_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFs7i, BFu7ll_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFs7ll, BFu7ll_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFs7s, BFu7ll_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFu7c, BFu7ll_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFu7i, BFu7ll_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFu7ll, BFu7ll_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7i_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7i_BFu7s, BFu7ll_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll, BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFs7c, BFu7ll_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFs7i, BFu7ll_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFs7ll, BFu7ll_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFs7s, BFu7ll_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFu7c, BFu7ll_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFu7i, BFu7ll_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFu7ll, BFu7ll_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7ll_BFu7s, BFu7ll_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s, BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFs7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFs7c, BFu7ll_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFs7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFs7i, BFu7ll_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFs7ll, BFu7ll_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFs7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFs7s, BFu7ll_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFu7c, BFu7ll_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFu7i, BFu7ll_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFu7ll, BFu7ll_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu7s_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7ll_BFu7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu7s_BFu7s, BFu7ll_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu7ll_BFu8c) C1{ FL:7 FL:7 Fc:8}



static void Test_BFu7ll_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu8c, BFu7ll_BFu7ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu7ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu7ll_BFu8i) C1{ FL:7 FL:7 Fi:8}



static void Test_BFu7ll_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu8i, BFu7ll_BFu7ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu7ll_BFu8ll) C1{ FL:7 FL:7 FL:8}



static void Test_BFu7ll_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu8ll, BFu7ll_BFu7ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu7ll_BFu8s) C1{ FL:7 FL:7 Fs:8}



static void Test_BFu7ll_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu8s, BFu7ll_BFu7ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu7ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu7ll_BFu9i) C1{ FL:7 FL:7 Fi:9}



static void Test_BFu7ll_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu9i, BFu7ll_BFu7ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu7ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu7ll_BFu9ll) C1{ FL:7 FL:7 FL:9}



static void Test_BFu7ll_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu9ll, BFu7ll_BFu7ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu7ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu7ll_BFu9s) C1{ FL:7 FL:7 Fs:9}



static void Test_BFu7ll_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_BFu9s, BFu7ll_BFu7ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu7ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu7ll_BFu7ll_C) C1{ FL:7 FL:7 Fc}



static void Test_BFu7ll_BFu7ll_C()
{
  {
    init_simple_test("BFu7ll_BFu7ll_C");
    static STRUCT_IF_C BFu7ll_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_C, BFu7ll_BFu7ll_C)
//============================================================================


struct  BFu7ll_BFu7ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu7ll_BFu7ll_D) C1{ FL:7 FL:7 FL}



static void Test_BFu7ll_BFu7ll_D()
{
  {
    init_simple_test("BFu7ll_BFu7ll_D");
    static STRUCT_IF_C BFu7ll_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_D, BFu7ll_BFu7ll_D)
//============================================================================


struct  BFu7ll_BFu7ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu7ll_BFu7ll_F) C1{ FL:7 FL:7 Fi}



static void Test_BFu7ll_BFu7ll_F()
{
  {
    init_simple_test("BFu7ll_BFu7ll_F");
    static STRUCT_IF_C BFu7ll_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_F, BFu7ll_BFu7ll_F)
//============================================================================


struct  BFu7ll_BFu7ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu7ll_BFu7ll_I) C1{ FL:7 FL:7 Fi}



static void Test_BFu7ll_BFu7ll_I()
{
  {
    init_simple_test("BFu7ll_BFu7ll_I");
    static STRUCT_IF_C BFu7ll_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_I, BFu7ll_BFu7ll_I)
//============================================================================


struct  BFu7ll_BFu7ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu7ll_BFu7ll_Ip) C1{ FL:7 FL:7 Fp}



static void Test_BFu7ll_BFu7ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Ip, BFu7ll_BFu7ll_Ip)
//============================================================================


struct  BFu7ll_BFu7ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu7ll_L) C1{ FL:7 FL:7 FL}



static void Test_BFu7ll_BFu7ll_L()
{
  {
    init_simple_test("BFu7ll_BFu7ll_L");
    static STRUCT_IF_C BFu7ll_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_L, BFu7ll_BFu7ll_L)
//============================================================================


struct  BFu7ll_BFu7ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu7ll_BFu7ll_S) C1{ FL:7 FL:7 Fs}



static void Test_BFu7ll_BFu7ll_S()
{
  {
    init_simple_test("BFu7ll_BFu7ll_S");
    static STRUCT_IF_C BFu7ll_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_S, BFu7ll_BFu7ll_S)
//============================================================================


struct  BFu7ll_BFu7ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu7ll_Uc) C1{ FL:7 FL:7 Fc}



static void Test_BFu7ll_BFu7ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Uc, BFu7ll_BFu7ll_Uc)
//============================================================================


struct  BFu7ll_BFu7ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu7ll_Ui) C1{ FL:7 FL:7 Fi}



static void Test_BFu7ll_BFu7ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Ui, BFu7ll_BFu7ll_Ui)
//============================================================================


struct  BFu7ll_BFu7ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu7ll_Ul) C1{ FL:7 FL:7 FL}



static void Test_BFu7ll_BFu7ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Ul, BFu7ll_BFu7ll_Ul)
//============================================================================


struct  BFu7ll_BFu7ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu7ll_Us) C1{ FL:7 FL:7 Fs}



static void Test_BFu7ll_BFu7ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Us");
    static STRUCT_IF_C BFu7ll_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Us, BFu7ll_BFu7ll_Us)
//============================================================================


struct  BFu7ll_BFu7ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu7ll_BFu7ll_Vp) C1{ FL:7 FL:7 Fp}



static void Test_BFu7ll_BFu7ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu7ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7ll_Vp, BFu7ll_BFu7ll_Vp)
//============================================================================


struct  BFu7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu7ll_BFu7s) C1{ FL:7 Fs:7}



static void Test_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s, BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c, BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFs7c, BFu7ll_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFs7i, BFu7ll_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFs7ll, BFu7ll_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFs7s, BFu7ll_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFu7c, BFu7ll_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFu7i, BFu7ll_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFu7ll, BFu7ll_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7c_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7c_BFu7s, BFu7ll_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i, BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFs7c, BFu7ll_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFs7i, BFu7ll_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFs7ll, BFu7ll_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFs7s, BFu7ll_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFu7c, BFu7ll_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFu7i, BFu7ll_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFu7ll, BFu7ll_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7i_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7i_BFu7s, BFu7ll_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll, BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFs7c, BFu7ll_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFs7i, BFu7ll_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFs7ll, BFu7ll_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFs7s, BFu7ll_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFu7c, BFu7ll_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFu7i, BFu7ll_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFu7ll, BFu7ll_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7ll_BFu7s, BFu7ll_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s, BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFs7c, BFu7ll_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFs7i, BFu7ll_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFs7ll, BFu7ll_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFs7s, BFu7ll_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFu7c, BFu7ll_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFu7i, BFu7ll_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFu7ll, BFu7ll_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFs7s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFs7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFs7s_BFu7s, BFu7ll_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu7s_BFu15i) C1{ FL:7 Fs:7 Fi:15}



static void Test_BFu7ll_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu15i, BFu7ll_BFu7s_BFu15i)
//============================================================================


struct  BFu7ll_BFu7s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu7s_BFu15ll) C1{ FL:7 Fs:7 FL:15}



static void Test_BFu7ll_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7ll_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu15ll, BFu7ll_BFu7s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu7s_BFu15s) C1{ FL:7 Fs:7 Fs:15}



static void Test_BFu7ll_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu15s, BFu7ll_BFu7s_BFu15s)
//============================================================================


struct  BFu7ll_BFu7s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu7s_BFu16i) C1{ FL:7 Fs:7 Fi:16}



static void Test_BFu7ll_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu16i, BFu7ll_BFu7s_BFu16i)
//============================================================================


struct  BFu7ll_BFu7s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu7s_BFu16ll) C1{ FL:7 Fs:7 FL:16}



static void Test_BFu7ll_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7ll_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu16ll, BFu7ll_BFu7s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu7s_BFu16s) C1{ FL:7 Fs:7 Fs:16}



static void Test_BFu7ll_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu16s, BFu7ll_BFu7s_BFu16s)
//============================================================================


struct  BFu7ll_BFu7s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu7s_BFu17i) C1{ FL:7 Fs:7 Fi:17}



static void Test_BFu7ll_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu17i, BFu7ll_BFu7s_BFu17i)
//============================================================================


struct  BFu7ll_BFu7s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu7s_BFu17ll) C1{ FL:7 Fs:7 FL:17}



static void Test_BFu7ll_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7ll_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu17ll, BFu7ll_BFu7s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu7s_BFu1c) C1{ FL:7 Fs:7 Fc:1}



static void Test_BFu7ll_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu1c, BFu7ll_BFu7s_BFu1c)
//============================================================================


struct  BFu7ll_BFu7s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu7s_BFu1i) C1{ FL:7 Fs:7 Fi:1}



static void Test_BFu7ll_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu1i, BFu7ll_BFu7s_BFu1i)
//============================================================================


struct  BFu7ll_BFu7s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu7s_BFu1ll) C1{ FL:7 Fs:7 FL:1}



static void Test_BFu7ll_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu1ll, BFu7ll_BFu7s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu7s_BFu1s) C1{ FL:7 Fs:7 Fs:1}



static void Test_BFu7ll_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7ll_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu1s, BFu7ll_BFu7s_BFu1s)
//============================================================================


struct  BFu7ll_BFu7s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu7s_BFu31i) C1{ FL:7 Fs:7 Fi:31}



static void Test_BFu7ll_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu31i, BFu7ll_BFu7s_BFu31i)
//============================================================================


struct  BFu7ll_BFu7s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu7s_BFu31ll) C1{ FL:7 Fs:7 FL:31}



static void Test_BFu7ll_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7ll_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu31ll, BFu7ll_BFu7s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu7s_BFu32i) C1{ FL:7 Fs:7 Fi:32}



static void Test_BFu7ll_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu32i, BFu7ll_BFu7s_BFu32i)
//============================================================================


struct  BFu7ll_BFu7s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu7s_BFu32ll) C1{ FL:7 Fs:7 FL:32}



static void Test_BFu7ll_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7ll_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu32ll, BFu7ll_BFu7s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu7s_BFu33) C1{ FL:7 Fs:7 FL:33}



static void Test_BFu7ll_BFu7s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7ll_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu33, BFu7ll_BFu7s_BFu33)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c, BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFs7c, BFu7ll_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFs7i, BFu7ll_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFs7ll, BFu7ll_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFs7s, BFu7ll_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFu7c, BFu7ll_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFu7i, BFu7ll_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFu7ll, BFu7ll_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7c_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7c_BFu7s, BFu7ll_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i, BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFs7c, BFu7ll_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFs7i, BFu7ll_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFs7ll, BFu7ll_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFs7s, BFu7ll_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFu7c, BFu7ll_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFu7i, BFu7ll_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFu7ll, BFu7ll_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7i_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7i_BFu7s, BFu7ll_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll, BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFs7c, BFu7ll_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFs7i, BFu7ll_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFs7ll, BFu7ll_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFs7s, BFu7ll_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFu7c, BFu7ll_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFu7i, BFu7ll_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFu7ll, BFu7ll_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7ll_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7ll_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7ll_BFu7s, BFu7ll_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s, BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFs7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFs7c, BFu7ll_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFs7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFs7i, BFu7ll_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFs7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFs7ll, BFu7ll_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFs7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFs7s, BFu7ll_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFu7c, BFu7ll_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFu7i, BFu7ll_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFu7ll, BFu7ll_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu7s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7ll_BFu7s_BFu7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7ll_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7ll_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu7s_BFu7s, BFu7ll_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7ll_BFu7s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu7s_BFu8c) C1{ FL:7 Fs:7 Fc:8}



static void Test_BFu7ll_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu8c, BFu7ll_BFu7s_BFu8c)
//============================================================================


struct  BFu7ll_BFu7s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu7s_BFu8i) C1{ FL:7 Fs:7 Fi:8}



static void Test_BFu7ll_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu8i, BFu7ll_BFu7s_BFu8i)
//============================================================================


struct  BFu7ll_BFu7s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu7s_BFu8ll) C1{ FL:7 Fs:7 FL:8}



static void Test_BFu7ll_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7ll_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu8ll, BFu7ll_BFu7s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu7s_BFu8s) C1{ FL:7 Fs:7 Fs:8}



static void Test_BFu7ll_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu8s, BFu7ll_BFu7s_BFu8s)
//============================================================================


struct  BFu7ll_BFu7s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu7s_BFu9i) C1{ FL:7 Fs:7 Fi:9}



static void Test_BFu7ll_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu9i, BFu7ll_BFu7s_BFu9i)
//============================================================================


struct  BFu7ll_BFu7s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu7s_BFu9ll) C1{ FL:7 Fs:7 FL:9}



static void Test_BFu7ll_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7ll_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu9ll, BFu7ll_BFu7s_BFu9ll)
//============================================================================


struct  BFu7ll_BFu7s_BFu9s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu7s_BFu9s) C1{ FL:7 Fs:7 Fs:9}



static void Test_BFu7ll_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu7s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_BFu9s, BFu7ll_BFu7s_BFu9s)
//============================================================================


struct  BFu7ll_BFu7s_C  {
  __tsu64 v1:7;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu7ll_BFu7s_C) C1{ FL:7 Fs:7 Fc}



static void Test_BFu7ll_BFu7s_C()
{
  {
    init_simple_test("BFu7ll_BFu7s_C");
    static STRUCT_IF_C BFu7ll_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_C, BFu7ll_BFu7s_C)
//============================================================================


struct  BFu7ll_BFu7s_D  {
  __tsu64 v1:7;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu7ll_BFu7s_D) C1{ FL:7 Fs:7 FL}



static void Test_BFu7ll_BFu7s_D()
{
  {
    init_simple_test("BFu7ll_BFu7s_D");
    static STRUCT_IF_C BFu7ll_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_D, BFu7ll_BFu7s_D)
//============================================================================


struct  BFu7ll_BFu7s_F  {
  __tsu64 v1:7;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu7ll_BFu7s_F) C1{ FL:7 Fs:7 Fi}



static void Test_BFu7ll_BFu7s_F()
{
  {
    init_simple_test("BFu7ll_BFu7s_F");
    static STRUCT_IF_C BFu7ll_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_F, BFu7ll_BFu7s_F)
//============================================================================


struct  BFu7ll_BFu7s_I  {
  __tsu64 v1:7;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu7ll_BFu7s_I) C1{ FL:7 Fs:7 Fi}



static void Test_BFu7ll_BFu7s_I()
{
  {
    init_simple_test("BFu7ll_BFu7s_I");
    static STRUCT_IF_C BFu7ll_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_I, BFu7ll_BFu7s_I)
//============================================================================


struct  BFu7ll_BFu7s_Ip  {
  __tsu64 v1:7;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu7ll_BFu7s_Ip) C1{ FL:7 Fs:7 Fp}



static void Test_BFu7ll_BFu7s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu7s_Ip");
    static STRUCT_IF_C BFu7ll_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Ip, BFu7ll_BFu7s_Ip)
//============================================================================


struct  BFu7ll_BFu7s_L  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu7s_L) C1{ FL:7 Fs:7 FL}



static void Test_BFu7ll_BFu7s_L()
{
  {
    init_simple_test("BFu7ll_BFu7s_L");
    static STRUCT_IF_C BFu7ll_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_L, BFu7ll_BFu7s_L)
//============================================================================


struct  BFu7ll_BFu7s_S  {
  __tsu64 v1:7;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu7ll_BFu7s_S) C1{ FL:7 Fs:7 Fs}



static void Test_BFu7ll_BFu7s_S()
{
  {
    init_simple_test("BFu7ll_BFu7s_S");
    static STRUCT_IF_C BFu7ll_BFu7s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_S, BFu7ll_BFu7s_S)
//============================================================================


struct  BFu7ll_BFu7s_Uc  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu7s_Uc) C1{ FL:7 Fs:7 Fc}



static void Test_BFu7ll_BFu7s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu7s_Uc");
    static STRUCT_IF_C BFu7ll_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Uc, BFu7ll_BFu7s_Uc)
//============================================================================


struct  BFu7ll_BFu7s_Ui  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu7s_Ui) C1{ FL:7 Fs:7 Fi}



static void Test_BFu7ll_BFu7s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu7s_Ui");
    static STRUCT_IF_C BFu7ll_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu7s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Ui, BFu7ll_BFu7s_Ui)
//============================================================================


struct  BFu7ll_BFu7s_Ul  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu7s_Ul) C1{ FL:7 Fs:7 FL}



static void Test_BFu7ll_BFu7s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu7s_Ul");
    static STRUCT_IF_C BFu7ll_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Ul, BFu7ll_BFu7s_Ul)
//============================================================================


struct  BFu7ll_BFu7s_Us  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu7s_Us) C1{ FL:7 Fs:7 Fs}



static void Test_BFu7ll_BFu7s_Us()
{
  {
    init_simple_test("BFu7ll_BFu7s_Us");
    static STRUCT_IF_C BFu7ll_BFu7s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Us, BFu7ll_BFu7s_Us)
//============================================================================


struct  BFu7ll_BFu7s_Vp  {
  __tsu64 v1:7;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu7ll_BFu7s_Vp) C1{ FL:7 Fs:7 Fp}



static void Test_BFu7ll_BFu7s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu7s_Vp");
    static STRUCT_IF_C BFu7ll_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu7s_Vp, BFu7ll_BFu7s_Vp)
//============================================================================


struct  BFu7ll_BFu8c  {
  __tsu64 v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu7ll_BFu8c) C1{ FL:7 Fc:8}



static void Test_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c, BFu7ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu8c_BFu15i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu8c_BFu15i) C1{ FL:7 Fc:8 Fi:15}



static void Test_BFu7ll_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu15i, BFu7ll_BFu8c_BFu15i)
//============================================================================


struct  BFu7ll_BFu8c_BFu15ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu8c_BFu15ll) C1{ FL:7 Fc:8 FL:15}



static void Test_BFu7ll_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu15ll, BFu7ll_BFu8c_BFu15ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu15s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu8c_BFu15s) C1{ FL:7 Fc:8 Fs:15}



static void Test_BFu7ll_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu15s, BFu7ll_BFu8c_BFu15s)
//============================================================================


struct  BFu7ll_BFu8c_BFu16i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu8c_BFu16i) C1{ FL:7 Fc:8 Fi:16}



static void Test_BFu7ll_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu16i, BFu7ll_BFu8c_BFu16i)
//============================================================================


struct  BFu7ll_BFu8c_BFu16ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu8c_BFu16ll) C1{ FL:7 Fc:8 FL:16}



static void Test_BFu7ll_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu16ll, BFu7ll_BFu8c_BFu16ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu16s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu8c_BFu16s) C1{ FL:7 Fc:8 Fs:16}



static void Test_BFu7ll_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu16s, BFu7ll_BFu8c_BFu16s)
//============================================================================


struct  BFu7ll_BFu8c_BFu17i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu8c_BFu17i) C1{ FL:7 Fc:8 Fi:17}



static void Test_BFu7ll_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu17i, BFu7ll_BFu8c_BFu17i)
//============================================================================


struct  BFu7ll_BFu8c_BFu17ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu8c_BFu17ll) C1{ FL:7 Fc:8 FL:17}



static void Test_BFu7ll_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu17ll, BFu7ll_BFu8c_BFu17ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu1c  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu8c_BFu1c) C1{ FL:7 Fc:8 Fc:1}



static void Test_BFu7ll_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu1c, BFu7ll_BFu8c_BFu1c)
//============================================================================


struct  BFu7ll_BFu8c_BFu1i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu8c_BFu1i) C1{ FL:7 Fc:8 Fi:1}



static void Test_BFu7ll_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu1i, BFu7ll_BFu8c_BFu1i)
//============================================================================


struct  BFu7ll_BFu8c_BFu1ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu8c_BFu1ll) C1{ FL:7 Fc:8 FL:1}



static void Test_BFu7ll_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu1ll, BFu7ll_BFu8c_BFu1ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu1s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu8c_BFu1s) C1{ FL:7 Fc:8 Fs:1}



static void Test_BFu7ll_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7ll_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu1s, BFu7ll_BFu8c_BFu1s)
//============================================================================


struct  BFu7ll_BFu8c_BFu31i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu8c_BFu31i) C1{ FL:7 Fc:8 Fi:31}



static void Test_BFu7ll_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu31i, BFu7ll_BFu8c_BFu31i)
//============================================================================


struct  BFu7ll_BFu8c_BFu31ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu8c_BFu31ll) C1{ FL:7 Fc:8 FL:31}



static void Test_BFu7ll_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu31ll, BFu7ll_BFu8c_BFu31ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu32i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu8c_BFu32i) C1{ FL:7 Fc:8 Fi:32}



static void Test_BFu7ll_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu32i, BFu7ll_BFu8c_BFu32i)
//============================================================================


struct  BFu7ll_BFu8c_BFu32ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu8c_BFu32ll) C1{ FL:7 Fc:8 FL:32}



static void Test_BFu7ll_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu32ll, BFu7ll_BFu8c_BFu32ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu33  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu8c_BFu33) C1{ FL:7 Fc:8 FL:33}



static void Test_BFu7ll_BFu8c_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu33");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu33, BFu7ll_BFu8c_BFu33)
//============================================================================


struct  BFu7ll_BFu8c_BFu7c  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu8c_BFu7c) C1{ FL:7 Fc:8 Fc:7}



static void Test_BFu7ll_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu7c, BFu7ll_BFu8c_BFu7c)
//============================================================================


struct  BFu7ll_BFu8c_BFu7i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu8c_BFu7i) C1{ FL:7 Fc:8 Fi:7}



static void Test_BFu7ll_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu7i, BFu7ll_BFu8c_BFu7i)
//============================================================================


struct  BFu7ll_BFu8c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu8c_BFu7ll) C1{ FL:7 Fc:8 FL:7}



static void Test_BFu7ll_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu7ll, BFu7ll_BFu8c_BFu7ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu7s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu8c_BFu7s) C1{ FL:7 Fc:8 Fs:7}



static void Test_BFu7ll_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu7s, BFu7ll_BFu8c_BFu7s)
//============================================================================


struct  BFu7ll_BFu8c_BFu8c  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu8c_BFu8c) C1{ FL:7 Fc:8 Fc:8}



static void Test_BFu7ll_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu8c, BFu7ll_BFu8c_BFu8c)
//============================================================================


struct  BFu7ll_BFu8c_BFu8i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu8c_BFu8i) C1{ FL:7 Fc:8 Fi:8}



static void Test_BFu7ll_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu8i, BFu7ll_BFu8c_BFu8i)
//============================================================================


struct  BFu7ll_BFu8c_BFu8ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu8c_BFu8ll) C1{ FL:7 Fc:8 FL:8}



static void Test_BFu7ll_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu8ll, BFu7ll_BFu8c_BFu8ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu8s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu8c_BFu8s) C1{ FL:7 Fc:8 Fs:8}



static void Test_BFu7ll_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu8s, BFu7ll_BFu8c_BFu8s)
//============================================================================


struct  BFu7ll_BFu8c_BFu9i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu8c_BFu9i) C1{ FL:7 Fc:8 Fi:9}



static void Test_BFu7ll_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu9i, BFu7ll_BFu8c_BFu9i)
//============================================================================


struct  BFu7ll_BFu8c_BFu9ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu8c_BFu9ll) C1{ FL:7 Fc:8 FL:9}



static void Test_BFu7ll_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu9ll, BFu7ll_BFu8c_BFu9ll)
//============================================================================


struct  BFu7ll_BFu8c_BFu9s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu8c_BFu9s) C1{ FL:7 Fc:8 Fs:9}



static void Test_BFu7ll_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu8c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_BFu9s, BFu7ll_BFu8c_BFu9s)
//============================================================================


struct  BFu7ll_BFu8c_C  {
  __tsu64 v1:7;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu7ll_BFu8c_C) C1{ FL:7 Fc:8 Fc}



static void Test_BFu7ll_BFu8c_C()
{
  {
    init_simple_test("BFu7ll_BFu8c_C");
    static STRUCT_IF_C BFu7ll_BFu8c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_C, BFu7ll_BFu8c_C)
//============================================================================


struct  BFu7ll_BFu8c_D  {
  __tsu64 v1:7;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu7ll_BFu8c_D) C1{ FL:7 Fc:8 FL}



static void Test_BFu7ll_BFu8c_D()
{
  {
    init_simple_test("BFu7ll_BFu8c_D");
    static STRUCT_IF_C BFu7ll_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_D, BFu7ll_BFu8c_D)
//============================================================================


struct  BFu7ll_BFu8c_F  {
  __tsu64 v1:7;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu7ll_BFu8c_F) C1{ FL:7 Fc:8 Fi}



static void Test_BFu7ll_BFu8c_F()
{
  {
    init_simple_test("BFu7ll_BFu8c_F");
    static STRUCT_IF_C BFu7ll_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_F, BFu7ll_BFu8c_F)
//============================================================================


struct  BFu7ll_BFu8c_I  {
  __tsu64 v1:7;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu7ll_BFu8c_I) C1{ FL:7 Fc:8 Fi}



static void Test_BFu7ll_BFu8c_I()
{
  {
    init_simple_test("BFu7ll_BFu8c_I");
    static STRUCT_IF_C BFu7ll_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_I, BFu7ll_BFu8c_I)
//============================================================================


struct  BFu7ll_BFu8c_Ip  {
  __tsu64 v1:7;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu7ll_BFu8c_Ip) C1{ FL:7 Fc:8 Fp}



static void Test_BFu7ll_BFu8c_Ip()
{
  {
    init_simple_test("BFu7ll_BFu8c_Ip");
    static STRUCT_IF_C BFu7ll_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Ip, BFu7ll_BFu8c_Ip)
//============================================================================


struct  BFu7ll_BFu8c_L  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu8c_L) C1{ FL:7 Fc:8 FL}



static void Test_BFu7ll_BFu8c_L()
{
  {
    init_simple_test("BFu7ll_BFu8c_L");
    static STRUCT_IF_C BFu7ll_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_L, BFu7ll_BFu8c_L)
//============================================================================


struct  BFu7ll_BFu8c_S  {
  __tsu64 v1:7;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu7ll_BFu8c_S) C1{ FL:7 Fc:8 Fs}



static void Test_BFu7ll_BFu8c_S()
{
  {
    init_simple_test("BFu7ll_BFu8c_S");
    static STRUCT_IF_C BFu7ll_BFu8c_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_S, BFu7ll_BFu8c_S)
//============================================================================


struct  BFu7ll_BFu8c_Uc  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu8c_Uc) C1{ FL:7 Fc:8 Fc}



static void Test_BFu7ll_BFu8c_Uc()
{
  {
    init_simple_test("BFu7ll_BFu8c_Uc");
    static STRUCT_IF_C BFu7ll_BFu8c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Uc, BFu7ll_BFu8c_Uc)
//============================================================================


struct  BFu7ll_BFu8c_Ui  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu8c_Ui) C1{ FL:7 Fc:8 Fi}



static void Test_BFu7ll_BFu8c_Ui()
{
  {
    init_simple_test("BFu7ll_BFu8c_Ui");
    static STRUCT_IF_C BFu7ll_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Ui, BFu7ll_BFu8c_Ui)
//============================================================================


struct  BFu7ll_BFu8c_Ul  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu8c_Ul) C1{ FL:7 Fc:8 FL}



static void Test_BFu7ll_BFu8c_Ul()
{
  {
    init_simple_test("BFu7ll_BFu8c_Ul");
    static STRUCT_IF_C BFu7ll_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Ul, BFu7ll_BFu8c_Ul)
//============================================================================


struct  BFu7ll_BFu8c_Us  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu8c_Us) C1{ FL:7 Fc:8 Fs}



static void Test_BFu7ll_BFu8c_Us()
{
  {
    init_simple_test("BFu7ll_BFu8c_Us");
    static STRUCT_IF_C BFu7ll_BFu8c_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Us, BFu7ll_BFu8c_Us)
//============================================================================


struct  BFu7ll_BFu8c_Vp  {
  __tsu64 v1:7;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu7ll_BFu8c_Vp) C1{ FL:7 Fc:8 Fp}



static void Test_BFu7ll_BFu8c_Vp()
{
  {
    init_simple_test("BFu7ll_BFu8c_Vp");
    static STRUCT_IF_C BFu7ll_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8c_Vp, BFu7ll_BFu8c_Vp)
//============================================================================


struct  BFu7ll_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu7ll_BFu8i) C1{ FL:7 Fi:8}



static void Test_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i, BFu7ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu8i_BFu15i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu8i_BFu15i) C1{ FL:7 Fi:8 Fi:15}



static void Test_BFu7ll_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu15i, BFu7ll_BFu8i_BFu15i)
//============================================================================


struct  BFu7ll_BFu8i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu8i_BFu15ll) C1{ FL:7 Fi:8 FL:15}



static void Test_BFu7ll_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu15ll, BFu7ll_BFu8i_BFu15ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu15s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu8i_BFu15s) C1{ FL:7 Fi:8 Fs:15}



static void Test_BFu7ll_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu15s, BFu7ll_BFu8i_BFu15s)
//============================================================================


struct  BFu7ll_BFu8i_BFu16i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu8i_BFu16i) C1{ FL:7 Fi:8 Fi:16}



static void Test_BFu7ll_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu16i, BFu7ll_BFu8i_BFu16i)
//============================================================================


struct  BFu7ll_BFu8i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu8i_BFu16ll) C1{ FL:7 Fi:8 FL:16}



static void Test_BFu7ll_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu16ll, BFu7ll_BFu8i_BFu16ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu16s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu8i_BFu16s) C1{ FL:7 Fi:8 Fs:16}



static void Test_BFu7ll_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu16s, BFu7ll_BFu8i_BFu16s)
//============================================================================


struct  BFu7ll_BFu8i_BFu17i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu8i_BFu17i) C1{ FL:7 Fi:8 Fi:17}



static void Test_BFu7ll_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu17i, BFu7ll_BFu8i_BFu17i)
//============================================================================


struct  BFu7ll_BFu8i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu8i_BFu17ll) C1{ FL:7 Fi:8 FL:17}



static void Test_BFu7ll_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu17ll, BFu7ll_BFu8i_BFu17ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu1c  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu8i_BFu1c) C1{ FL:7 Fi:8 Fc:1}



static void Test_BFu7ll_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu1c, BFu7ll_BFu8i_BFu1c)
//============================================================================


struct  BFu7ll_BFu8i_BFu1i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu8i_BFu1i) C1{ FL:7 Fi:8 Fi:1}



static void Test_BFu7ll_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu1i, BFu7ll_BFu8i_BFu1i)
//============================================================================


struct  BFu7ll_BFu8i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu8i_BFu1ll) C1{ FL:7 Fi:8 FL:1}



static void Test_BFu7ll_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu1ll, BFu7ll_BFu8i_BFu1ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu1s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu8i_BFu1s) C1{ FL:7 Fi:8 Fs:1}



static void Test_BFu7ll_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu1s, BFu7ll_BFu8i_BFu1s)
//============================================================================


struct  BFu7ll_BFu8i_BFu31i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu8i_BFu31i) C1{ FL:7 Fi:8 Fi:31}



static void Test_BFu7ll_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu31i, BFu7ll_BFu8i_BFu31i)
//============================================================================


struct  BFu7ll_BFu8i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu8i_BFu31ll) C1{ FL:7 Fi:8 FL:31}



static void Test_BFu7ll_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu31ll, BFu7ll_BFu8i_BFu31ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu32i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu8i_BFu32i) C1{ FL:7 Fi:8 Fi:32}



static void Test_BFu7ll_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu32i, BFu7ll_BFu8i_BFu32i)
//============================================================================


struct  BFu7ll_BFu8i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu8i_BFu32ll) C1{ FL:7 Fi:8 FL:32}



static void Test_BFu7ll_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu32ll, BFu7ll_BFu8i_BFu32ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu33  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu8i_BFu33) C1{ FL:7 Fi:8 FL:33}



static void Test_BFu7ll_BFu8i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu33");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu33, BFu7ll_BFu8i_BFu33)
//============================================================================


struct  BFu7ll_BFu8i_BFu7c  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu8i_BFu7c) C1{ FL:7 Fi:8 Fc:7}



static void Test_BFu7ll_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu7c, BFu7ll_BFu8i_BFu7c)
//============================================================================


struct  BFu7ll_BFu8i_BFu7i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu8i_BFu7i) C1{ FL:7 Fi:8 Fi:7}



static void Test_BFu7ll_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu7i, BFu7ll_BFu8i_BFu7i)
//============================================================================


struct  BFu7ll_BFu8i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu8i_BFu7ll) C1{ FL:7 Fi:8 FL:7}



static void Test_BFu7ll_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu7ll, BFu7ll_BFu8i_BFu7ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu7s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu8i_BFu7s) C1{ FL:7 Fi:8 Fs:7}



static void Test_BFu7ll_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu7s, BFu7ll_BFu8i_BFu7s)
//============================================================================


struct  BFu7ll_BFu8i_BFu8c  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu8i_BFu8c) C1{ FL:7 Fi:8 Fc:8}



static void Test_BFu7ll_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu8c, BFu7ll_BFu8i_BFu8c)
//============================================================================


struct  BFu7ll_BFu8i_BFu8i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu8i_BFu8i) C1{ FL:7 Fi:8 Fi:8}



static void Test_BFu7ll_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu8i, BFu7ll_BFu8i_BFu8i)
//============================================================================


struct  BFu7ll_BFu8i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu8i_BFu8ll) C1{ FL:7 Fi:8 FL:8}



static void Test_BFu7ll_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu8ll, BFu7ll_BFu8i_BFu8ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu8s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu8i_BFu8s) C1{ FL:7 Fi:8 Fs:8}



static void Test_BFu7ll_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu8s, BFu7ll_BFu8i_BFu8s)
//============================================================================


struct  BFu7ll_BFu8i_BFu9i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu8i_BFu9i) C1{ FL:7 Fi:8 Fi:9}



static void Test_BFu7ll_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu9i, BFu7ll_BFu8i_BFu9i)
//============================================================================


struct  BFu7ll_BFu8i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu8i_BFu9ll) C1{ FL:7 Fi:8 FL:9}



static void Test_BFu7ll_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu9ll, BFu7ll_BFu8i_BFu9ll)
//============================================================================


struct  BFu7ll_BFu8i_BFu9s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu8i_BFu9s) C1{ FL:7 Fi:8 Fs:9}



static void Test_BFu7ll_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu8i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_BFu9s, BFu7ll_BFu8i_BFu9s)
//============================================================================


struct  BFu7ll_BFu8i_C  {
  __tsu64 v1:7;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu7ll_BFu8i_C) C1{ FL:7 Fi:8 Fc}



static void Test_BFu7ll_BFu8i_C()
{
  {
    init_simple_test("BFu7ll_BFu8i_C");
    static STRUCT_IF_C BFu7ll_BFu8i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_C, BFu7ll_BFu8i_C)
//============================================================================


struct  BFu7ll_BFu8i_D  {
  __tsu64 v1:7;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu7ll_BFu8i_D) C1{ FL:7 Fi:8 FL}



static void Test_BFu7ll_BFu8i_D()
{
  {
    init_simple_test("BFu7ll_BFu8i_D");
    static STRUCT_IF_C BFu7ll_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_D, BFu7ll_BFu8i_D)
//============================================================================


struct  BFu7ll_BFu8i_F  {
  __tsu64 v1:7;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu7ll_BFu8i_F) C1{ FL:7 Fi:8 Fi}



static void Test_BFu7ll_BFu8i_F()
{
  {
    init_simple_test("BFu7ll_BFu8i_F");
    static STRUCT_IF_C BFu7ll_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_F, BFu7ll_BFu8i_F)
//============================================================================


struct  BFu7ll_BFu8i_I  {
  __tsu64 v1:7;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu7ll_BFu8i_I) C1{ FL:7 Fi:8 Fi}



static void Test_BFu7ll_BFu8i_I()
{
  {
    init_simple_test("BFu7ll_BFu8i_I");
    static STRUCT_IF_C BFu7ll_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_I, BFu7ll_BFu8i_I)
//============================================================================


struct  BFu7ll_BFu8i_Ip  {
  __tsu64 v1:7;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu7ll_BFu8i_Ip) C1{ FL:7 Fi:8 Fp}



static void Test_BFu7ll_BFu8i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu8i_Ip");
    static STRUCT_IF_C BFu7ll_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Ip, BFu7ll_BFu8i_Ip)
//============================================================================


struct  BFu7ll_BFu8i_L  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu8i_L) C1{ FL:7 Fi:8 FL}



static void Test_BFu7ll_BFu8i_L()
{
  {
    init_simple_test("BFu7ll_BFu8i_L");
    static STRUCT_IF_C BFu7ll_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_L, BFu7ll_BFu8i_L)
//============================================================================


struct  BFu7ll_BFu8i_S  {
  __tsu64 v1:7;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu7ll_BFu8i_S) C1{ FL:7 Fi:8 Fs}



static void Test_BFu7ll_BFu8i_S()
{
  {
    init_simple_test("BFu7ll_BFu8i_S");
    static STRUCT_IF_C BFu7ll_BFu8i_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_S, BFu7ll_BFu8i_S)
//============================================================================


struct  BFu7ll_BFu8i_Uc  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu8i_Uc) C1{ FL:7 Fi:8 Fc}



static void Test_BFu7ll_BFu8i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu8i_Uc");
    static STRUCT_IF_C BFu7ll_BFu8i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Uc, BFu7ll_BFu8i_Uc)
//============================================================================


struct  BFu7ll_BFu8i_Ui  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu8i_Ui) C1{ FL:7 Fi:8 Fi}



static void Test_BFu7ll_BFu8i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu8i_Ui");
    static STRUCT_IF_C BFu7ll_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Ui, BFu7ll_BFu8i_Ui)
//============================================================================


struct  BFu7ll_BFu8i_Ul  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu8i_Ul) C1{ FL:7 Fi:8 FL}



static void Test_BFu7ll_BFu8i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu8i_Ul");
    static STRUCT_IF_C BFu7ll_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Ul, BFu7ll_BFu8i_Ul)
//============================================================================


struct  BFu7ll_BFu8i_Us  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu8i_Us) C1{ FL:7 Fi:8 Fs}



static void Test_BFu7ll_BFu8i_Us()
{
  {
    init_simple_test("BFu7ll_BFu8i_Us");
    static STRUCT_IF_C BFu7ll_BFu8i_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Us, BFu7ll_BFu8i_Us)
//============================================================================


struct  BFu7ll_BFu8i_Vp  {
  __tsu64 v1:7;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu7ll_BFu8i_Vp) C1{ FL:7 Fi:8 Fp}



static void Test_BFu7ll_BFu8i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu8i_Vp");
    static STRUCT_IF_C BFu7ll_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8i_Vp, BFu7ll_BFu8i_Vp)
//============================================================================


struct  BFu7ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu7ll_BFu8ll) C1{ FL:7 FL:8}



static void Test_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll, BFu7ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu8ll_BFu15i) C1{ FL:7 FL:8 Fi:15}



static void Test_BFu7ll_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu15i, BFu7ll_BFu8ll_BFu15i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu8ll_BFu15ll) C1{ FL:7 FL:8 FL:15}



static void Test_BFu7ll_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu15ll, BFu7ll_BFu8ll_BFu15ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu8ll_BFu15s) C1{ FL:7 FL:8 Fs:15}



static void Test_BFu7ll_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu15s, BFu7ll_BFu8ll_BFu15s)
//============================================================================


struct  BFu7ll_BFu8ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu8ll_BFu16i) C1{ FL:7 FL:8 Fi:16}



static void Test_BFu7ll_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu16i, BFu7ll_BFu8ll_BFu16i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu8ll_BFu16ll) C1{ FL:7 FL:8 FL:16}



static void Test_BFu7ll_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu16ll, BFu7ll_BFu8ll_BFu16ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu8ll_BFu16s) C1{ FL:7 FL:8 Fs:16}



static void Test_BFu7ll_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu16s, BFu7ll_BFu8ll_BFu16s)
//============================================================================


struct  BFu7ll_BFu8ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu8ll_BFu17i) C1{ FL:7 FL:8 Fi:17}



static void Test_BFu7ll_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu17i, BFu7ll_BFu8ll_BFu17i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu8ll_BFu17ll) C1{ FL:7 FL:8 FL:17}



static void Test_BFu7ll_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu17ll, BFu7ll_BFu8ll_BFu17ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu8ll_BFu1c) C1{ FL:7 FL:8 Fc:1}



static void Test_BFu7ll_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu1c, BFu7ll_BFu8ll_BFu1c)
//============================================================================


struct  BFu7ll_BFu8ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu8ll_BFu1i) C1{ FL:7 FL:8 Fi:1}



static void Test_BFu7ll_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu1i, BFu7ll_BFu8ll_BFu1i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu8ll_BFu1ll) C1{ FL:7 FL:8 FL:1}



static void Test_BFu7ll_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu1ll, BFu7ll_BFu8ll_BFu1ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu8ll_BFu1s) C1{ FL:7 FL:8 Fs:1}



static void Test_BFu7ll_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu1s, BFu7ll_BFu8ll_BFu1s)
//============================================================================


struct  BFu7ll_BFu8ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu8ll_BFu31i) C1{ FL:7 FL:8 Fi:31}



static void Test_BFu7ll_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu31i, BFu7ll_BFu8ll_BFu31i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu8ll_BFu31ll) C1{ FL:7 FL:8 FL:31}



static void Test_BFu7ll_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu31ll, BFu7ll_BFu8ll_BFu31ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu8ll_BFu32i) C1{ FL:7 FL:8 Fi:32}



static void Test_BFu7ll_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu32i, BFu7ll_BFu8ll_BFu32i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu8ll_BFu32ll) C1{ FL:7 FL:8 FL:32}



static void Test_BFu7ll_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu32ll, BFu7ll_BFu8ll_BFu32ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu33  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu8ll_BFu33) C1{ FL:7 FL:8 FL:33}



static void Test_BFu7ll_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu33");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu33, BFu7ll_BFu8ll_BFu33)
//============================================================================


struct  BFu7ll_BFu8ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu8ll_BFu7c) C1{ FL:7 FL:8 Fc:7}



static void Test_BFu7ll_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu7c, BFu7ll_BFu8ll_BFu7c)
//============================================================================


struct  BFu7ll_BFu8ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu8ll_BFu7i) C1{ FL:7 FL:8 Fi:7}



static void Test_BFu7ll_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu7i, BFu7ll_BFu8ll_BFu7i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu8ll_BFu7ll) C1{ FL:7 FL:8 FL:7}



static void Test_BFu7ll_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu7ll, BFu7ll_BFu8ll_BFu7ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu8ll_BFu7s) C1{ FL:7 FL:8 Fs:7}



static void Test_BFu7ll_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu7s, BFu7ll_BFu8ll_BFu7s)
//============================================================================


struct  BFu7ll_BFu8ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu8ll_BFu8c) C1{ FL:7 FL:8 Fc:8}



static void Test_BFu7ll_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu8c, BFu7ll_BFu8ll_BFu8c)
//============================================================================


struct  BFu7ll_BFu8ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu8ll_BFu8i) C1{ FL:7 FL:8 Fi:8}



static void Test_BFu7ll_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu8i, BFu7ll_BFu8ll_BFu8i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu8ll_BFu8ll) C1{ FL:7 FL:8 FL:8}



static void Test_BFu7ll_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu8ll, BFu7ll_BFu8ll_BFu8ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu8ll_BFu8s) C1{ FL:7 FL:8 Fs:8}



static void Test_BFu7ll_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu8s, BFu7ll_BFu8ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu8ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu8ll_BFu9i) C1{ FL:7 FL:8 Fi:9}



static void Test_BFu7ll_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu9i, BFu7ll_BFu8ll_BFu9i)
//============================================================================


struct  BFu7ll_BFu8ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu8ll_BFu9ll) C1{ FL:7 FL:8 FL:9}



static void Test_BFu7ll_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu9ll, BFu7ll_BFu8ll_BFu9ll)
//============================================================================


struct  BFu7ll_BFu8ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7ll_BFu8ll_BFu9s) C1{ FL:7 FL:8 Fs:9}



static void Test_BFu7ll_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu7ll_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_BFu9s, BFu7ll_BFu8ll_BFu9s)
//============================================================================


struct  BFu7ll_BFu8ll_C  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu7ll_BFu8ll_C) C1{ FL:7 FL:8 Fc}



static void Test_BFu7ll_BFu8ll_C()
{
  {
    init_simple_test("BFu7ll_BFu8ll_C");
    static STRUCT_IF_C BFu7ll_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_C");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_C, BFu7ll_BFu8ll_C)
//============================================================================


struct  BFu7ll_BFu8ll_D  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu7ll_BFu8ll_D) C1{ FL:7 FL:8 FL}



static void Test_BFu7ll_BFu8ll_D()
{
  {
    init_simple_test("BFu7ll_BFu8ll_D");
    static STRUCT_IF_C BFu7ll_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_D, BFu7ll_BFu8ll_D)
//============================================================================


struct  BFu7ll_BFu8ll_F  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu7ll_BFu8ll_F) C1{ FL:7 FL:8 Fi}



static void Test_BFu7ll_BFu8ll_F()
{
  {
    init_simple_test("BFu7ll_BFu8ll_F");
    static STRUCT_IF_C BFu7ll_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_F, BFu7ll_BFu8ll_F)
//============================================================================


struct  BFu7ll_BFu8ll_I  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu7ll_BFu8ll_I) C1{ FL:7 FL:8 Fi}



static void Test_BFu7ll_BFu8ll_I()
{
  {
    init_simple_test("BFu7ll_BFu8ll_I");
    static STRUCT_IF_C BFu7ll_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_I, BFu7ll_BFu8ll_I)
//============================================================================


struct  BFu7ll_BFu8ll_Ip  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu7ll_BFu8ll_Ip) C1{ FL:7 FL:8 Fp}



static void Test_BFu7ll_BFu8ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Ip");
    static STRUCT_IF_C BFu7ll_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Ip, BFu7ll_BFu8ll_Ip)
//============================================================================


struct  BFu7ll_BFu8ll_L  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7ll_BFu8ll_L) C1{ FL:7 FL:8 FL}



static void Test_BFu7ll_BFu8ll_L()
{
  {
    init_simple_test("BFu7ll_BFu8ll_L");
    static STRUCT_IF_C BFu7ll_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_L, BFu7ll_BFu8ll_L)
//============================================================================


struct  BFu7ll_BFu8ll_S  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu7ll_BFu8ll_S) C1{ FL:7 FL:8 Fs}



static void Test_BFu7ll_BFu8ll_S()
{
  {
    init_simple_test("BFu7ll_BFu8ll_S");
    static STRUCT_IF_C BFu7ll_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_S");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_S, BFu7ll_BFu8ll_S)
//============================================================================


struct  BFu7ll_BFu8ll_Uc  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu7ll_BFu8ll_Uc) C1{ FL:7 FL:8 Fc}



static void Test_BFu7ll_BFu8ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Uc");
    static STRUCT_IF_C BFu7ll_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Uc, BFu7ll_BFu8ll_Uc)
//============================================================================


struct  BFu7ll_BFu8ll_Ui  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu7ll_BFu8ll_Ui) C1{ FL:7 FL:8 Fi}



static void Test_BFu7ll_BFu8ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Ui");
    static STRUCT_IF_C BFu7ll_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7ll_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Ui, BFu7ll_BFu8ll_Ui)
//============================================================================


struct  BFu7ll_BFu8ll_Ul  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7ll_BFu8ll_Ul) C1{ FL:7 FL:8 FL}



static void Test_BFu7ll_BFu8ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Ul");
    static STRUCT_IF_C BFu7ll_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Ul, BFu7ll_BFu8ll_Ul)
//============================================================================


struct  BFu7ll_BFu8ll_Us  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu7ll_BFu8ll_Us) C1{ FL:7 FL:8 Fs}



static void Test_BFu7ll_BFu8ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Us");
    static STRUCT_IF_C BFu7ll_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "BFu7ll_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Us, BFu7ll_BFu8ll_Us)
//============================================================================


struct  BFu7ll_BFu8ll_Vp  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu7ll_BFu8ll_Vp) C1{ FL:7 FL:8 Fp}



static void Test_BFu7ll_BFu8ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu8ll_Vp");
    static STRUCT_IF_C BFu7ll_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7ll_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8ll_Vp, BFu7ll_BFu8ll_Vp)
//============================================================================


struct  BFu7ll_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu7ll_BFu8s) C1{ FL:7 Fs:8}



static void Test_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s, BFu7ll_BFu8s)
//============================================================================


struct  BFu7ll_BFu8s_BFu15i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7ll_BFu8s_BFu15i) C1{ FL:7 Fs:8 Fi:15}



static void Test_BFu7ll_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu15i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu15i, BFu7ll_BFu8s_BFu15i)
//============================================================================


struct  BFu7ll_BFu8s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7ll_BFu8s_BFu15ll) C1{ FL:7 Fs:8 FL:15}



static void Test_BFu7ll_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu15ll, BFu7ll_BFu8s_BFu15ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu15s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7ll_BFu8s_BFu15s) C1{ FL:7 Fs:8 Fs:15}



static void Test_BFu7ll_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu15s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu15s, BFu7ll_BFu8s_BFu15s)
//============================================================================


struct  BFu7ll_BFu8s_BFu16i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7ll_BFu8s_BFu16i) C1{ FL:7 Fs:8 Fi:16}



static void Test_BFu7ll_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu16i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu16i, BFu7ll_BFu8s_BFu16i)
//============================================================================


struct  BFu7ll_BFu8s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7ll_BFu8s_BFu16ll) C1{ FL:7 Fs:8 FL:16}



static void Test_BFu7ll_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu16ll, BFu7ll_BFu8s_BFu16ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu16s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7ll_BFu8s_BFu16s) C1{ FL:7 Fs:8 Fs:16}



static void Test_BFu7ll_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu16s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu16s, BFu7ll_BFu8s_BFu16s)
//============================================================================


struct  BFu7ll_BFu8s_BFu17i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7ll_BFu8s_BFu17i) C1{ FL:7 Fs:8 Fi:17}



static void Test_BFu7ll_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu17i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu17i, BFu7ll_BFu8s_BFu17i)
//============================================================================


struct  BFu7ll_BFu8s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7ll_BFu8s_BFu17ll) C1{ FL:7 Fs:8 FL:17}



static void Test_BFu7ll_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu17ll, BFu7ll_BFu8s_BFu17ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu1c  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7ll_BFu8s_BFu1c) C1{ FL:7 Fs:8 Fc:1}



static void Test_BFu7ll_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu1c");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu1c, BFu7ll_BFu8s_BFu1c)
//============================================================================


struct  BFu7ll_BFu8s_BFu1i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7ll_BFu8s_BFu1i) C1{ FL:7 Fs:8 Fi:1}



static void Test_BFu7ll_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu1i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu1i, BFu7ll_BFu8s_BFu1i)
//============================================================================


struct  BFu7ll_BFu8s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7ll_BFu8s_BFu1ll) C1{ FL:7 Fs:8 FL:1}



static void Test_BFu7ll_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu1ll, BFu7ll_BFu8s_BFu1ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu1s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7ll_BFu8s_BFu1s) C1{ FL:7 Fs:8 Fs:1}



static void Test_BFu7ll_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu1s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7ll_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu1s, BFu7ll_BFu8s_BFu1s)
//============================================================================


struct  BFu7ll_BFu8s_BFu31i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7ll_BFu8s_BFu31i) C1{ FL:7 Fs:8 Fi:31}



static void Test_BFu7ll_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu31i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu31i, BFu7ll_BFu8s_BFu31i)
//============================================================================


struct  BFu7ll_BFu8s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7ll_BFu8s_BFu31ll) C1{ FL:7 Fs:8 FL:31}



static void Test_BFu7ll_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu31ll, BFu7ll_BFu8s_BFu31ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu32i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7ll_BFu8s_BFu32i) C1{ FL:7 Fs:8 Fi:32}



static void Test_BFu7ll_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu32i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu32i, BFu7ll_BFu8s_BFu32i)
//============================================================================


struct  BFu7ll_BFu8s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7ll_BFu8s_BFu32ll) C1{ FL:7 Fs:8 FL:32}



static void Test_BFu7ll_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu32ll, BFu7ll_BFu8s_BFu32ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu33  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7ll_BFu8s_BFu33) C1{ FL:7 Fs:8 FL:33}



static void Test_BFu7ll_BFu8s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu33");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu33, BFu7ll_BFu8s_BFu33)
//============================================================================


struct  BFu7ll_BFu8s_BFu7c  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7ll_BFu8s_BFu7c) C1{ FL:7 Fs:8 Fc:7}



static void Test_BFu7ll_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu7c");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu7c, BFu7ll_BFu8s_BFu7c)
//============================================================================


struct  BFu7ll_BFu8s_BFu7i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7ll_BFu8s_BFu7i) C1{ FL:7 Fs:8 Fi:7}



static void Test_BFu7ll_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu7i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu7i, BFu7ll_BFu8s_BFu7i)
//============================================================================


struct  BFu7ll_BFu8s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7ll_BFu8s_BFu7ll) C1{ FL:7 Fs:8 FL:7}



static void Test_BFu7ll_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu7ll, BFu7ll_BFu8s_BFu7ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu7s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7ll_BFu8s_BFu7s) C1{ FL:7 Fs:8 Fs:7}



static void Test_BFu7ll_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu7s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu7s, BFu7ll_BFu8s_BFu7s)
//============================================================================


struct  BFu7ll_BFu8s_BFu8c  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7ll_BFu8s_BFu8c) C1{ FL:7 Fs:8 Fc:8}



static void Test_BFu7ll_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu8c");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu8c, BFu7ll_BFu8s_BFu8c)
//============================================================================


struct  BFu7ll_BFu8s_BFu8i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7ll_BFu8s_BFu8i) C1{ FL:7 Fs:8 Fi:8}



static void Test_BFu7ll_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu8i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu8i, BFu7ll_BFu8s_BFu8i)
//============================================================================


struct  BFu7ll_BFu8s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7ll_BFu8s_BFu8ll) C1{ FL:7 Fs:8 FL:8}



static void Test_BFu7ll_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu8ll, BFu7ll_BFu8s_BFu8ll)
//============================================================================


struct  BFu7ll_BFu8s_BFu8s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7ll_BFu8s_BFu8s) C1{ FL:7 Fs:8 Fs:8}



static void Test_BFu7ll_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu8s");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu8s, BFu7ll_BFu8s_BFu8s)
//============================================================================


struct  BFu7ll_BFu8s_BFu9i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7ll_BFu8s_BFu9i) C1{ FL:7 Fs:8 Fi:9}



static void Test_BFu7ll_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu9i");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu9i, BFu7ll_BFu8s_BFu9i)
//============================================================================


struct  BFu7ll_BFu8s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7ll_BFu8s_BFu9ll) C1{ FL:7 Fs:8 FL:9}



static void Test_BFu7ll_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu7ll_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7ll_BFu8s_BFu9ll, BFu7ll_BFu8s_BFu9ll)
//============================================================================

